我需要进行插入,但仅在相似记录不存在的情况下才能进行插入 例如:
INSERT INTO请求('user_id','subject','text','time')VALUES(56,'test','test 1234',6516516)
但要检查另一条记录中是否有相同的“主题”和“文字”:
我需要两种情况的SQL,因为我现在不确定我将要使用的是什么 提前谢谢!
答案 0 :(得分:14)
INSERT INTO requests ('user_id','subject','text','time')
VALUES (56,'test','test 1234',6516516)
ON DUPLICATE KEY UPDATE time = VALUES(time), user_id = VALUES(user_id)
将相关列设置为索引UNIQUE。
这将插入一行,但如果主题或文本(或两者)已经存在,则改为使用给定time
和user_id
答案 1 :(得分:4)
首先,您可以进行更新。如果记录不存在,则不会发生任何事情......
UPDATE
requests
SET
user_id = 56,
time = 6516516
WHERE
subject = 'test'
AND text = 'test 1234'
然后您可以在INSERT中使用SELECT而不是VALUES。如果记录已存在,则不会插入任何内容......
INSERT INTO
requests (
user_id,
subject,
text,
time
)
SELECT
56,
'test',
'test 1234',
6516516
WHERE
NOT EXISTS (SELECT * FROM requests WHERE subject = 'test' AND text = 'test 1234')
答案 2 :(得分:2)
IF NOT EXISTS (SELECT user_id, text from users where user_id = @user_id AND text = @text) BEGIN
INSERT INTO users ....
ELSE
UPDATE users SET xyz=uvw where user_id = @user_id AND text = @text
END
答案 3 :(得分:1)
您可以使用IGNORE
命令
例如,像这样使用
INSERT IGNORE INTO requests ('user_id','subject','text','time') VALUES (56,'test','test 1234',6516516)
代替
INSERT INTO requests ('user_id','subject','text','time') VALUES (56,'test','test 1234',6516516)
答案 4 :(得分:1)
替换您的查询
INSERT INTO请求('user_id','subject','text','time')值(56,'test','test 1234',6516516)
收件人
REPLACE INTO请求(“ user_id”,“主题”,“文本”,“时间”)的值(56,“ test”,“ test 1234”,6516516)
这会给执行增加一点延迟,但是比其他任何方法都有效
答案 5 :(得分:0)
查看REPLACE
mysql语句?