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

标签 mysql sql

这是我想要做的事情的例子:

我有 3 个表:

  • 村庄(编号、名称)
  • 家庭(id,village_id)
  • 人员(名字、姓氏、家庭 ID)

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

基本上我想做那种事情:

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

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

最佳答案

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

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

关于MySQL 对多个表的列添加唯一约束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15658487/

相关文章:

Mysql:在子表中插入一个新行,其中包含从父表获取的外键列以外的新值

php - 更改 SQL/PHP 网站菜单中的递归条件

sql - JCR SQL2 节点属性和所有子节点中的全文搜索

mysql - mysql中的列之间的最小值与least(),给出不可预测的结果

mysql - 如果数据库存在,如何退出 MySQL 脚本

php - 通过 PHP 从 SQL 为 1 个用户选择多个值

sql - 递归计数sql

sql - Postgres 查询返回只有一位作者的书籍

mysql - 错误代码 1005,SQL 状态 HY000 : Can't create table errno: 150

mysql选择