MySQL 值对的唯一键/约束,无论它们位于哪一列

标签 mysql unique-key

如何将唯一键应用于下表和要求?

CREATE TABLE `friends` (
  `item_id` VARCHAR(36) NOT NULL,
  `friend_id` VARCHAR(36) NOT NULL,
);

这里,item_idfriend_id 都与相同的父字段(外键)相关。 friend_iditem_id按顺序出现也没关系,因为它的意思也是一样的。

例如,如果值 (5, 7) 出现在该行中,则不应接受 (7, 5) 作为新行 - 因为它在逻辑上是重复记录。

现在,如何向该表添加唯一键或一些约束?

最佳答案

保留item_id < friend_id这可以通过 CHECK 约束来完成。 这从 (5, 7) 中删除了冗余 (7, 5)。

CHECK (item_id < friend_id)
CONSTRAINT UC_item_friend UNIQUE (item_id, friend_id)

相应地,代码必须小心保持这个顺序。

纯粹主义者可能会反对这种技术,认为应该建立friend_ids和item_ids的子关系。

关于MySQL 值对的唯一键/约束,无论它们位于哪一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50749159/

相关文章:

php - 获取 php 变量以选择语句不起作用

php - 如何仅显示从数据库中获取的数据的名称?

php - 显示特定时间点的表数据

MySQL 键约束

sql - 如何知道未提交的事务是否试图将特定的唯一键插入 SQL

sql - 使用 INSERT ON CONFLICT 在跨多列的唯一约束上发生冲突,其中一列可能为空

mysql - 如何使用 case 语句从另一行分配值?

mysql - 用自定义字符串替换 Mysql 空字段

MySQL:默认情况下主键是唯一的吗?

php - 哪个唯一 ID 用于博客和评论?