我有以下表格
create table users
(
id_user int(9) AUTO_INCREMENT primary key,
email varchar(64)
);
create table friendships
(
id_friendship int(9) AUTO_INCREMENT primary key,
id_friend1 int(9),
id_friend2 int(9),
FOREIGN KEY (id_friend1) REFERENCES users(id_user),
FOREIGN KEY (id_friend2) REFERENCES users(id_user),
UNIQUE(id_friend1,id_friend2)
)
我想避免两个用户之间有两次相同的友谊。 但是我仍然可以像这样两次插入相同的友谊:
INSERT INTO friendships( id_friend1, id_friend2) VALUES (1,2)
INSERT INTO friendships( id_friend1, id_friend2) VALUES (2,1)
对我(1,2)和(2,1)是平等的,我想避免它。我怎样才能实现它?
答案 0 :(得分:3)
您可以按特定顺序编写这些ID。例如,在插入之前,尝试确保较小的id进入左列,较大的id进入另一列。
在你的例子中总是如下:
INSERT INTO friendships( id_friend1, id_friend2) VALUES (1,2)
并且永远不会像:
INSERT INTO friendships( id_friend1, id_friend2) VALUES (2,1)
因为id 2大于id 1。
希望它有所帮助!
答案 1 :(得分:0)
不幸的是,MySql仍然不支持检查约束,因此您必须在业务逻辑中强制执行此限制。如果要插入(1,2),只需通过运行简单的select语句检查是否存在(2,1)。