mysql - 创建具有两个双向唯一字段的表

标签 mysql sql constraints

我正在尝试创建一个包含两个字段(id1、id2)的表,其中它们都将 id 引用为其他表中的外键,并且两者都是唯一的。

简单示例:

表“people”,包含字段 id 和 name。表“婚姻”具有字段 id1 和 id2。现在,如果我知道 id=3 的某人与 id=6 结婚,那么就不需要在“婚姻”表中包含 (id1=3, id2=6) 和 (id1=6, id2=3)。

最佳答案

在大多数数据库中,您可以通过 check 约束来完成此操作。像这样的东西:

alter table t add constraint chk_t_id1_id2 check (id1 < id2)

或者,使用表达式或计算列的唯一索引:

create unique index unq_t_id1_id2 on (least(id1, id2), greatest(id1, id2));

最新版本的 MySQL 支持生成列,因此您可以对生成列执行与上述类似的操作。

否则,您需要使用触发器。这绝对是可行的,但是您需要考虑插入和更新的逻辑。触发器比约束更重要。

关于mysql - 创建具有两个双向唯一字段的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44102891/

相关文章:

mysql - 如何以mysql中给定的格式获取mysql中的当前日期-1?

MySQL - 如何修改复杂的内部连接和连接查询?

ios - 无法在 View Controller 上为 Table View 和 Segmented Control 添加约束

java - 持久化关联实体时违反 Hibernate 约束

php - 我无法在线上传此代码中的任何文件,但在本地可以使用

mysql - 无法在远程Linux服务器上的Dreamweaver CS6和MySQL之间建立链接

Mysql sum 与 group_concat 和连接表

java - Apache Camel 服务的 Junit 测试用例

sql - 与标准编程语言相比,在大多数SQL实现中,为什么x!= null不返回true?

R lpsolve如何定义约束旅行商