如何使元组在SQL表中是唯一的?

ypi*_*ard 7 mysql sql constraints

我的问题很简单,但我不能说出来.我有一个用户表,每个用户都有id.

我想制作友谊表,但我不希望能够有重复的记录.意思不是这个:

id_user1 | id_user2
---------|----------
   2     |    3
   3     |    2
Run Code Online (Sandbox Code Playgroud)

我清楚了吗?

目前我为我的表创建了这个:

CREATE TABLE User(
    id INT NOT NULL AUTO_INCREMENT,
    name VARCHAR(100) NOT NULL,
    surname VARCHAR(100) NOT NULL,
    PRIMARY KEY (id)
);

CREATE TABLE Friends(
    id_user1 INT NOT NULL,
    id_user2 INT NOT NULL,
    PRIMARY KEY(id_user1, id_user2),
    FOREIGN KEY (id_user1) REFERENCES User(id),
    FOREIGN KEY (id_user2) REFERENCES User(id),
);
Run Code Online (Sandbox Code Playgroud)

[编辑1:]也许最佳做法是两次保存每条记录?双向?

Mar*_*ger -1

就 SQL 语言而言,您正在描述一个CHECK约束 - 对值的限制,它不是简单的、已定义的约束(例如外键或唯一性)之一。

但我不认为 mysql 尊重CHECK约束。我看到的通常建议是使用一个触发器,如果​​任何插入或更新尝试违反您的条件,该触发器会引发异常。