Mysql表多主键关系

时间:2016-02-20 17:25:09

标签: mysql foreign-keys primary-key

我有两列的表格。 ID1和ID2。 我想把2列作为主键。

当插入ID1=22 , ID2=55ID1=55 , ID2=22时,请不要插入并显示错误!

注*:此表是关系船。相同的兄弟和姐妹。真的有3个colmuns:ID1,ID2,TYP。

  1. ID1 =第一个用户ID
  2. ID2 =第二个用户ID
  3. TYP =关系船的类型(兄弟/姐妹/叔叔/阿姨......)
  4. 现在我如何将所有列设置为主列?当ID1和ID2如上所述并且也使TYP成为主?感谢@>

2 个答案:

答案 0 :(得分:1)

MySQL没有一种简单的方法可以识别(id1,id2)和(id2,id1)应该是一样的。

因此,您需要创建一个触发器来处理这个问题。如果(id1, id2)已经是主键或唯一键,那么就像这样:

delimiter $$
create trigger tr_table_insert before insert on t
for each row 
begin
    if (exists (select 1
                from t
                where t.id2 = new.id1 and t.id1 = new.id2
               )
       ) then
        set msg = concat('Combination ', new.id1, ' and ', new.id2, ' already exists);
    signal sqlstate '45000' set message_text = msg;
    end if;
end;
delimiter $$;

答案 1 :(得分:0)

您可以拥有包含多个列的主键,例如thisthis示例。 只需将PRIMARY KEY (ID1, ID2)添加到create table语句中即可。

我有点担心的是,您说(22/55)(55/22)应该被检测为重复项。单凭ID1和ID2就不会出现这种情况。 (22/55)(55/22)是不同的,但对于关系表来说完全没问题:如果22是55的阿姨,那么55是22的 nephew ,所以< em>应该是该表中的两行。