我的问题很简单,但我无法用语言表达。 我有一个用户表,每个用户都有 ID。
我想做一个友情表,但是我不想能够有重复的记录。意思不是这个:
id_user1 | id_user2
---------|----------
2 | 3
3 | 2
我够清楚吗?
目前我有这个用于我的表创建:
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),
);
[编辑 1:] 也许最好的做法是将每条记录保存两次?两种方式?
最佳答案
您可以在触发器中检查重复项,但最好确保例如具有较低值的 id 转到 id_user1,另一个转到 id_user2。您可以在您的应用程序中或在触发器的帮助下执行此操作,例如您在表上创建主键约束并:
DROP TRIGGER IF EXISTS yourtable_bi;
delimiter //
CREATE TRIGGER yourtable_bi
before insert on yourtable
for each row
begin
declare x int;
if (new.id_user1>new.id_user2)
then
set x:=NEW.id_user1;
set NEW.id_user1:=NEW.id_user2;
set NEW.id_user2:=x;
end if;
end//
delimiter ;
所以,然后之后
insert into yourtable values (1,2);
如果你尝试
insert into yourtable values (2,1);
它会尝试插入相同的记录,但会因为主键约束而失败。
如果您的 table 上允许,您也可以这样做以进行更新。
关于mysql - 如何使元组在 SQL 表中唯一?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40743621/