Php MySQL插入查询以避免插入
我有一个MySQL表,如下所示:Php MySQL插入查询以避免插入,php,mysql,Php,Mysql,我有一个MySQL表,如下所示: +----+--------+---------+ | id | userid | otherid | +----+--------+---------+ | 1 | 1 | 2 | | 2 | 1 | 3 | | 3 | 3 | 5 | +----+--------+---------+ 我不希望userid和otherid的配对再次出现在表中。因此,例如,以下插入内容不应出现在表中:
+----+--------+---------+
| 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内部导致不必要的类型转换,这在更大规模的工作负载中会变得明显