在插入之前,MySQL检查2值已经存在

时间:2017-05-21 00:00:47

标签: mysql

我的专栏是这样的。专栏" 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"是否相同。

我该怎么做?

2 个答案:

答案 0 :(得分:3)

创建复合唯一索引。这将允许各个字段中的任意数量的重复,但组合必须是唯一的。 CREATE UNIQUE INDEX ix_uq ON tablename(b,x);

...如果未违反唯一索引,则使用INSERT IGNORE进行插入。如果是,请忽略插入。

INSERT IGNORE INTO test(a,b,x,y)VALUES(5,“example.com”,“admin”,“5555555”);

如果你想插入除非有重复,并且有更新,你也可以使用INSERT INTO ... ON DUPLICATE KEY UPDATE;

参考:MySQL only insert new row if combination of columns (which allow duplicates) is unique

答案 1 :(得分:1)

您想让数据库完成工作。虽然您可以在查询中设置条件,但该条件可能不是普遍适用,或者某人可能使用其他查询。

数据库可以使用唯一约束或索引来检查它。实际上,唯一约束是使用唯一索引实现:

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,因为后者会忽略所有错误,而您只想忽略由重复键引起的错误。