The*_*own 94 mysql conditional insert
我很难形成条件INSERT
我有x_table与列(实例,用户,项),其中实例ID是唯一的.我想仅在用户已经没有给定项目时才插入新行.
例如,尝试插入instance = 919191 user = 123 item = 456
Insert into x_table (instance, user, item) values (919191, 123, 456)
ONLY IF there are no rows where user=123 and item=456
Run Code Online (Sandbox Code Playgroud)
任何有关正确方向的帮助或指导都将非常感激.
Jon*_*ler 111
如果您的DBMS没有对您在执行插入时选择的表施加限制,请尝试:
INSERT INTO x_table(instance, user, item)
SELECT 919191, 123, 456
FROM dual
WHERE NOT EXISTS (SELECT * FROM x_table
WHERE user = 123
AND item = 456)
Run Code Online (Sandbox Code Playgroud)
在这里,dual是一个只有一行的表(最初在Oracle中找到,现在也在mysql中).逻辑是SELECT语句生成具有所需值的单行数据,但仅在尚未找到值时生成.
或者,查看MERGE语句.
MrD*_*MrD 47
您还可以使用INSERT IGNORE静默忽略插入而不是在(user,item)上有唯一索引时更新或插入行.
查询将如下所示:
INSERT IGNORE INTO x_table(instance, user, item) VALUES (919191, 123, 456)
Run Code Online (Sandbox Code Playgroud)
您可以添加唯一索引CREATE UNIQUE INDEX user_item ON x_table (user, item).
小智 26
你有没有试过这样的东西?
INSERT INTO x_table
SELECT 919191 as instance, 123 as user, 456 as item
FROM x_table
WHERE (user=123 and item=456)
HAVING COUNT(*) = 0;
Run Code Online (Sandbox Code Playgroud)
Ale*_*lli 10
用a UNIQUE(user, item),做:
Insert into x_table (instance, user, item) values (919191, 123, 456)
ON DUPLICATE KEY UPDATE user=123
Run Code Online (Sandbox Code Playgroud)
这个user=123位是一个"无操作"来匹配ON DUPLICATE子句的语法而没有实际做任何重复的事情.
| 归档时间: |
|
| 查看次数: |
81156 次 |
| 最近记录: |