添加唯一约束,但仅对新插入强制执行

时间:2014-08-05 03:09:46

标签: mysql

我有一个包含3列的mysql INNODB表

id  |    col1    | col2

id是主键。

该表包含对(col1,col2)重复多次的行。

我可以在(col1,col2)上创建一个唯一索引,它只强制添加未来行的唯一性,但允许对(col1,col2)重复多次的现有行。

我尝试执行:

ALTER TABLE mytable ADD CONSTRAINT myconstraint UNIQUE (col1, col2)

但收到错误:     错误代码:1062。密钥'myconstraint'重复输入'1-1'

2 个答案:

答案 0 :(得分:2)

如果您想完成这项工作,可以添加一个名为NullIfOld的新列。将此列设置为新插入的常量值,并将旧列记录设置为NULL

然后创建一个唯一索引:

create unique index idx_mytable_col1_col2_nullifold on mytable(col1, col2, nullifold);

唯一索引允许多行具有NULL值,因此您可以创建索引。如果新值是常量(甚至类似concat(col1, col2)),则不允许使用新的唯一记录。

答案 1 :(得分:1)

答案很简单:不,你不能。 但您可以在插入时探索触发器并使用存储过程完成任务。

起点:http://cvuorinen.net/2013/05/validating-data-with-triggers-in-mysql/https://stackoverflow.com/a/10168959/2898712