我有一个包含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'
答案 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