如果存在两个值,则防止重复条目的sql

7hiiyaii  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(269)

我有一个查询,我想检查是否有2列具有相同的数据,如果是这样,我将详细说明不添加数据。
这是我的问题

INSERT INTO " . TABLE_PREFIX . "installs (
  username,userid,email,addontitle,addonversion,bburl,bbtitle,webmasteremail,cookie,dateline
) VALUES (
  '$username','$userid','$email','$addontitle','$addonversion','$bburl','$bbtitle','$webmasteremail','$cookie',NOW()
  )

我想检查bburl和addontitle是否匹配正在提交的条目,如果匹配,则不添加该条目。让我们添加一些示例条目

1 --- test@test.com --- Addon --- 1.2 --- test.com --- test --- admin@test.com --- 1 --- ????????
1 --- test@test.com --- Addon2 --- 1.2 --- test.com --- test --- admin@test.com --- 1 --- ????????
1 --- test@test.com --- Addon --- 1.2 --- test2.com --- test --- admin@test.com --- 1 --- ????????

所有这些条目都将添加,但现在我们得到另一个条目:

1 --- test@test.com --- Addon --- 1.3 --- test2.com --- test --- admin@test.com --- 1 --- ????????

test2.com已经安装了addon,所以我不想添加这个条目。我怎样才能防止这种情况?
作为一个单独的问题。如果您注意到我不想要的请求条目,那么test2.com似乎只是在更新产品,有没有办法修改现有值并更新已更改的内容?

mv1qrgav

mv1qrgav1#

可以在要唯一的列上创建唯一索引/约束:

alter table t add constraint unq_t_bburl_addontitle unique t(bburl, addontitle)

然后,表上的插入将生成一个错误。您可以使用 on duplicate key update :

insert into t ( . . . )
    values ( . . . )
    on duplicate key update bburl = values(bburl);

这个 update 不执行任何操作(因为值已经匹配),但这样可以防止代码返回错误。

相关问题