1

这是我想要做的一个例子:

我有 3 张桌子:

  • 村庄(id,名称)
  • 家庭 (id, village_id)
  • 人员(first_name、last_name、family_id)

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

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

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

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

4

2 回答 2

2

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

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

于 2013-03-27T12:27:04.750 回答
2

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

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

于 2013-03-27T12:18:11.300 回答