Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mysql中两列上的唯一索引_Mysql - Fatal编程技术网

mysql中两列上的唯一索引

mysql中两列上的唯一索引,mysql,Mysql,我在mysql中有一个名为“UserFriends”的表,我正在更新我的网站用户的好友详细信息 下面是表的模式(UserFriends) 现在,我想在userid和friendid上创建唯一索引。我已经创建了唯一的索引。所以,现在我无法插入与复制相同的userid和friendid。但若我在相反的字段中插入相同的值,它会接受而不会产生错误 例如: insert into userfriends ( userid, friendid ) select 1, 2 --- insert perfec

我在mysql中有一个名为“UserFriends”的表,我正在更新我的网站用户的好友详细信息

下面是表的模式(UserFriends)

现在,我想在userid和friendid上创建唯一索引。我已经创建了唯一的索引。所以,现在我无法插入与复制相同的userid和friendid。但若我在相反的字段中插入相同的值,它会接受而不会产生错误

例如:

insert into userfriends ( userid, friendid )
select 1, 2  --- insert perfect
insert into userfriends ( userid, friendid )
select 1, 2  --- show error because unique index comes in a picture
现在我插入

insert into userfriends ( userid, friendid )
select 2, 1  --- records insert here (i don't want this)

如何防止这种情况发生?

第一件事:对于插入内容,不要使用“选择”生成值,因为它容易混淆。而是这样做:

INSERT INTO userfriends (userid, friendid) VALUES (1, 2)
这就是说,拥有向后工作的唯一限定符的唯一方法是以编程方式进行。如果要阻止接受x,y,请运行
SELECT*from userfriends,其中userid=y和friendid=x
,如果得到结果,请在插入之前拒绝它。如果不这样做,则按正常方式插入到表中,并且您的唯一键将从此处拒绝它

INSERT INTO userfriends (userid, friendid) VALUES (1, 2)