Php MySQL插入查询以避免插入

Php MySQL插入查询以避免插入,php,mysql,Php,Mysql,我有一个MySQL表,如下所示: +----+--------+---------+ | id | userid | otherid | +----+--------+---------+ | 1 | 1 | 2 | | 2 | 1 | 3 | | 3 | 3 | 5 | +----+--------+---------+ 我不希望userid和otherid的配对再次出现在表中。因此,例如,以下插入内容不应出现在表中:

我有一个MySQL表,如下所示:

+----+--------+---------+
| id | userid | otherid |
+----+--------+---------+
|  1 |      1 |       2 |
|  2 |      1 |       3 |
|  3 |      3 |       5 |
+----+--------+---------+
我不希望
userid
otherid
的配对再次出现在表中。因此,例如,以下插入内容不应出现在表中:

INSERT INTO users (userid, otherid) VALUE ('2', '1');
INSERT INTO users (userid, otherid) VALUE ('1', '3');
INSERT INTO users (userid, otherid) VALUE ('3', '5');

要停止这些插入,插入中应包含哪些内容?或者我必须先进行单独的SELECT查询吗?我知道您可以对唯一列进行配对,但这不会拒绝上面的插入。

您可以在执行插入的函数中执行另一个选择,也可以根据您希望执行的操作设置触发器。是否希望插入失败?返回到用户的错误

触发器允许您在插入后执行另一个调用


如果数据来自用户,您可能还想考虑在将数据发送到数据库之前检查数据。在客户端验证它可以通过减少无效呼叫来节省一些时间。

如果我理解您的问题,那么您要寻找的是
唯一约束

您可以这样添加它:

ALTER TABLE table_name ADD UNIQUE(user_id,other_id);
在这种情况下,如果insert试图重写存在
user\u id
other\u id
的条件,mysql将抛出错误

进一步阅读

但这只会停止:

INSERT INTO users (userid, otherid) VALUES ('1', '2');
我也不知道该拒绝什么

INSERT INTO users (userid, otherid) VALUES ('2', '1');
寻找类似于

IF (userid = '1' AND otherid = '2') OR (userid = '2' AND otherid = '1') then fail otherwise input (userid = '1' AND otherid = '2')

抱歉,不确定解释的最佳方式。另外,出于性能原因,如果在数据库中将整数值定义为整数,则您确实不希望将其作为字符串文本引用

它会在MySQL内部导致不必要的类型转换,这在更大规模的工作负载中会变得明显