我有这个mySql表:
create table associations
(email1 varchar(30),
email2 varchar(30),
primary key(email1, email2));
现在在此表中,如果我按如下方式插入两行:
insert into associations values('a@abc.com','b@abc.com')
;
insert into associations values('b@abc.com','a@abc.com');
这些在数据库中是可以接受的。我想做的是它们不应该被数据库接受为我只对组合键而不是命令 感兴趣。
是否有任何内置的功能/关键字/黑客在mysql(或其他任何其他数据库)允许我这样做?
答案 0 :(得分:3)
在支持检查约束的RDBMS中,您可以强制执行这两个条目以特定顺序出现。*这可确保您所描述的那种重复项不会发生,因为两个排序中的一个将被拒绝。遗憾的是,MySQL没有提供检查约束,尽管this question的接受答案提出了一种使用触发器实现类似结果的方法。
*这假设您对列数据类型有总订单,在这种情况下您可以这样做。
答案 1 :(得分:1)
这对我有用,我想出了这个触发器:
mysql> create trigger insert_check_associations before insert on associations
-> for each row
-> begin
-> if new.email1>new.email2 then
-> set @a = new.email2;
-> set new.email2 = new.email1;
-> set new.email1 = @a;
-> end if;
-> end;//
查询正常,0行受影响(0.07秒)
此触发器按递增顺序交换两个值。