MySQL为多个表中的列添加唯一约束?

时间:2013-03-27 12:12:16

标签: mysql sql

以下是我要做的事情的一个例子:

我有3张桌子:

  • 村庄(身份证,姓名)
  • 家庭(id,village_id)
  • 人员(first_name,last_name,household_id)

我想确保没有2个人在同一个村庄拥有相同的名字和姓氏。

基本上我想做那样的事情:

ALTER TABLE persons 
 ADD UNIQUE (first_name, last_name, households.village_id 
            WHERE household_id=households.id)

有没有办法做类似的事情?

2 个答案:

答案 0 :(得分:2)

你不能直接这样做,但如果这是为了存储真实世界的数据,理论上两个名字相同的人可能住在一个村庄里,所以这可能不是最好的主意吗?

如果你坚持沿着这条路走下去,那么我建议使用一个STORED PROCEDURE来处理这个表的插入,接受用户名和村庄等参数。然后,存储过程可以在INSERT之前执行SELECT以检查冲突。这将取代任何INSERT查询。 UPDATE还需要通过程序处理以防止冲突。

答案 1 :(得分:2)

我认为没有简单的方法可以做到这一点。

您可能想尝试在插入/更新之前创建触发器并在自定义条件上抛出错误。但它高度依赖于您的MySQL版本:在5.5版之前,我认为没有正确的方法来引发错误 - 通常人们会使用黑客来调用不存在的程序。但是,如果您使用的是版本> 5.5,则可以使用SIGNAL语句:http://dev.mysql.com/doc/refman/5.5/en/signal.html