gpt4 book ai didi

mysql - 如何使元组在 SQL 表中唯一?

转载 作者:可可西里 更新时间:2023-11-01 06:38:17 25 4
gpt4 key购买 nike

我的问题很简单,但我无法用语言表达。我有一个用户表,每个用户都有 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com