以下是我要做的事情的一个例子:
我有3张桌子:
我想确保没有2个人在同一个村庄拥有相同的名字和姓氏。
基本上我想做那样的事情:
ALTER TABLE persons
ADD UNIQUE (first_name, last_name, households.village_id
WHERE household_id=households.id)
有没有办法做类似的事情?
答案 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