假设我有一个包含两列的mysql表:A和B。是否可以有一个唯一键,这样我只能在A或B中插入一个值一次(在整个表中一次)?
因此,如果列A包含“qwe”,列B包含“asd”,则这两个值将无法再插入到任一列中。
这将不起作用:
UNIQUE KEY `A` (`A`,`B`),
UNIQUE KEY `A_2` (`A`),
UNIQUE KEY `B` (`B`),
UNIQUE KEY `B_2` (`B`,`A`)
谢谢。
编辑:我能够通过以下触发器来完成此操作:
delimiter |
create trigger unique_check before insert on mytable
for each row begin
declare alreadyexists integer;
select count(*) > 0 into alreadyexists from mytable
where A=NEW.B or B=NEW.A;
IF alreadyexists = 1 THEN begin
DECLARE dummy INT;
SELECT 'A OR B already exists' INTO dummy FROM mytable
WHERE nonexistent = 'value';
end;
END IF;
END;|
但是,我没有看到“A OR B已经存在”错误消息,但是:
再次感谢!
最佳答案
是的,有可能。
1种方法是
您需要创建一个BEFORE INSERT
TRIGGER并返回错误(如果已在其他列/表中找到该值)。
从这个blog post
另一种方式
您也可以使用Transactions
使用带有事务的过程将数据插入事务表(InnoDB),
在触发器上写错误条件:
set @error=1;
在此过程中,如下所示:
set @error=0;
start transaction
do insert
if @error>0 then rollback;
else commit;