MySQL是否对多个表中的列添加唯一约束?

MySQL是否对多个表中的列添加唯一约束?,mysql,sql,Mysql,Sql,下面是我希望做的一个例子: 我有三张桌子: 身份证、姓名 住户身份证,乡村身份证 人员姓名、姓氏、家庭id 我想确保在同一个村庄里没有两个人的名字和姓氏相同 基本上我想做这样的事情: ALTER TABLE persons ADD UNIQUE (first_name, last_name, households.village_id WHERE household_id=households.id) 有没有办法做到这一点?你不能直接做到这一点,但如果这是为了存储

下面是我希望做的一个例子:

我有三张桌子:

身份证、姓名 住户身份证,乡村身份证 人员姓名、姓氏、家庭id 我想确保在同一个村庄里没有两个人的名字和姓氏相同

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

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

有没有办法做到这一点?

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


如果您坚持这样做,那么我建议您使用存储过程来处理对此表的插入,包括用户名和村庄等参数。然后,存储过程可以在插入之前进行选择以检查冲突。这将取代任何INSERT查询。更新还需要通过程序进行处理,以防止冲突。

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


如果您坚持这样做,那么我建议您使用存储过程来处理对此表的插入,包括用户名和村庄等参数。然后,存储过程可以在插入之前进行选择以检查冲突。这将取代任何INSERT查询。更新还需要通过程序进行处理以防止冲突。

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


您可能希望在插入/更新之前尝试在上创建触发器,并在自定义条件上引发错误。但它高度依赖于您的MySQL版本:在5.5版本之前,我认为没有正确的方法来引发错误-通常人们使用诸如调用不存在的过程之类的黑客。但如果您使用的是版本>5.5,则可以使用SIGNAL语句:

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


您可能希望在插入/更新之前尝试在上创建触发器,并在自定义条件上引发错误。但它高度依赖于您的MySQL版本:在5.5版本之前,我认为没有正确的方法来引发错误-通常人们使用诸如调用不存在的过程之类的黑客。但如果您的版本>5.5,则可以使用SIGNAL语句:

hisimon!谢谢你的回答。在我看来,这样做更具战略意义的原因是,对于我们公司来说,当一个村庄里有几个人同名时,处理例外情况似乎更值得,然后冒着用户创建重复项并弄乱数据的风险。你的解决方案听起来不错,我会详细研究的。非常感谢。嗨,西蒙!谢谢你的回答。在我看来,这样做更具战略意义的原因是,对于我们公司来说,当一个村庄里有几个人同名时,处理例外情况似乎更值得,然后冒着用户创建重复项并弄乱数据的风险。你的解决方案听起来不错,我会详细研究的。非常感谢。