2013-03-27 90 views
1

这里有一个例子我所期待的事:MySQL为来自多个表的列添加唯一约束?

我有3个表:

  • 村(ID,姓名)
  • 户数(ID,village_id)
  • 人(FIRST_NAME, last_name,household_id)

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

基本上我愿做这一类东西:

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

有没有办法做这样的事情?

回答

2

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

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

+1

嗨,Simon!谢谢您的回答。在我看来,这样做更具战略意义的原因是因为对于我们公司来说,当一个村庄中有几个人同名时,似乎更应该处理例外情况,那么就要承担用户的风险创造重复和混乱的数据。你的解决方案听起来不错,我会更详细地研究它。谢谢 ! – 2013-03-28 05:43:19

2

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

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

+0

好的,谢谢你的回答!我感谢您的帮助 ! – 2013-03-28 05:42:11