假设我有一个包含两列的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;

09-26 04:07