mysql - 如果存在 2 个值,SQL 防止重复条目
问题描述
我有一个查询,我想检查是否有 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 已经安装了插件,所以我不想添加这个条目。我怎样才能防止这种情况?
作为一个单独的问题。如果您注意到我不想要的请求条目,似乎 test2.com 只是在更新产品,有没有办法可以修改现有值并更新已更改的内容?
解决方案
您可以在要唯一的列上创建唯一索引/约束:
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
但这可以防止代码返回错误。
推荐阅读
- python - 在对象列表中的所有对象上调用方法的惯用方式 Python 3
- ms-access - Microsoft Access 创建查找 10 到 11 个月前记录的查询
- c++ - const 限定符和前向引用
- html - 透明边框图像翻转底层背景颜色的渐变?
- charts - 谷歌表 - 价格图表演示
- makefile - 检查 makefile 中的 ifeq 变量
- python - google-speech API 转录响应重复多次
- postgresql - 双 Postgres 实例 config_file 问题
- r - 查找函数中使用的函数
- azure-data-factory - 使用 Azure 数据工厂加载数据时出现问题