MySQL INSERT查询以避免插入

时间:2013-12-01 00:36:18

标签: php mysql

我有一个MySQL表如下:

+----+--------+---------+
| id | userid | otherid |
+----+--------+---------+
|  1 |      1 |       2 |
|  2 |      1 |       3 |
|  3 |      3 |       5 |
+----+--------+---------+

我不希望useridotherid的配对重新出现在表格中。例如,以下插入内容不应出现在表格中:

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

我在INSERT中包含哪些内容来阻止这些插入?或者我是否必须先单独执行SELECT查询?我知道你可以配对独特的列,但这不会拒绝上面的INSERTS。

4 个答案:

答案 0 :(得分:2)

如果我理解了你的问题,那么你要找的是UNIQUE CONSTRAINT

你可以像这样添加:

ALTER TABLE table_name ADD UNIQUE(user_id,other_id);

在这种情况下,如果插入尝试重写user_idother_id存在的条件,则mysql将抛出错误。

进一步阅读Mysql Unique

答案 1 :(得分:0)

您可以在执行插入的函数中执行另一个选择,也可以根据您想要发生的操作设置触发器。你想要插入失败吗?返回用户时出错?

触发器允许您在插入之后执行另一个调用。 http://net.tutsplus.com/tutorials/databases/introduction-to-mysql-triggers/

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

答案 2 :(得分:0)

但那只会停止:

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')

抱歉不确定解释的最佳方式

答案 3 :(得分:0)

另外,出于性能原因,如果您将整数值定义为数据库中的整数,那么您真的不想将整数值称为字符串文字。

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