我有一个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');
我在INSERT中包含哪些内容来阻止这些插入?或者我是否必须先单独执行SELECT查询?我知道你可以配对独特的列,但这不会拒绝上面的INSERTS。
答案 0 :(得分:2)
如果我理解了你的问题,那么你要找的是UNIQUE CONSTRAINT
。
你可以像这样添加:
ALTER TABLE table_name ADD UNIQUE(user_id,other_id);
在这种情况下,如果插入尝试重写user_id
和other_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内部导致不必要的类型转换,这在较大规模的工作负载中会很明显。