Mysql复合键顺序相关性

时间:2014-04-29 21:36:53

标签: mysql database key composite

我有这个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(或其他任何其他数据库)允许我这样做?

2 个答案:

答案 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秒)

此触发器按递增顺序交换两个值。