[英]Check value before insert and if already exists don't insert it on mysql using php
[英]MySQL check 2 values already exists before insert
我的专栏是这样的。 “ a”列是主要的,并且是自动递增的。
a | b | x | y
插入新数据时,我需要检查x和y列不应同时存在。
为了澄清起见,假设此行位于数据库中并具有这些值
(2, "example.com" , "admin", "123456")
我应该可以同时插入这两列
(3, "example.com" , "user", "123456")
(4, "example2.com" , "admin", "123456")
但我不应该插入此列
(5, "example.com" , "admin", "5555555")
因为“ example.com”和“ admin”值已经在数据库中连续存在。 列“ y”相同与否无关紧要。
我怎样才能做到这一点?
创建一个复合唯一索引。 这将允许在各个字段中进行任意数量的重复,但是组合必须是唯一的。 创建唯一索引ix_uq ON表名(b,x);
...并在不违反唯一索引的情况下使用INSERT IGNORE插入。 如果是,则忽略插入。
插入IGNORE测试(a,b,x,y)值(5,“ example.com”,“ admin”,“ 5555555”);
如果要插入,除非有重复项,否则要进行更新,也可以使用INSERT INTO ... ON DUPLICATE KEY UPDATE;
您想让数据库完成工作。 尽管您可以在查询中设置条件,但该条件可能并非普遍成立,否则有人可能会使用其他查询。
数据库可以使用唯一约束或索引进行检查。 实际上,唯一约束是使用唯一索引实现的:
create unique index unq_t_b_x on t(b, x);
(列可以按任何顺序排列。)
插入将如下所示:
insert into t(b, x, y)
values ('example.com', 'admin', '5555555')
on duplicate key update b = values(b);
请注意,自动增加的值不包括在更新中。
on duplicate key update
仅可防止insert
生成错误。 它比insert ignore
更好,因为后者将忽略所有错误,而您只想忽略由重复键引起的错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.