Mysql Insert语句,在Insert之前检查重复项
我需要进行插入,但仅当不存在类似记录时Mysql Insert语句,在Insert之前检查重复项,mysql,sql,insert,duplicates,Mysql,Sql,Insert,Duplicates,我需要进行插入,但仅当不存在类似记录时 例如: 在请求中插入('user_id','subject','text','time')值(56,'test','test1234',6516516) 但要检查另一条记录中是否有相同的“主题”和“文本”,请执行以下操作: 不插入任何内容 更新“时间”和“用户id” 对于这两种情况,我都需要sql,因为我现在不确定要使用什么。 提前谢谢 查看REPLACEmysql语句?首先,您可以进行更新。如果记录不存在,什么也不会发生 UPDATE request
例如: 在请求中插入('user_id','subject','text','time')值(56,'test','test1234',6516516) 但要检查另一条记录中是否有相同的“主题”和“文本”,请执行以下操作:
提前谢谢 查看
REPLACE
mysql语句?首先,您可以进行更新。如果记录不存在,什么也不会发生
UPDATE
requests
SET
user_id = 56,
time = 6516516
WHERE
subject = 'test'
AND text = 'test 1234'
然后可以在插入中使用“选择”而不是“值”。如果记录已存在,则不会插入任何内容
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')
将相关列设置为索引唯一
这将插入一行,但如果主题或文本(或两者)已经存在,您可以使用给定的
时间和用户id
更新现有行,您可以使用忽略命令
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
例如,像这样使用
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)
替换来自的查询
在请求中插入('user_id','subject','text','time')值(56,'test','test1234',6516516)
对,
替换为请求('user_id','subject','text','time')值(56,'test','test1234',6516516)
这将给执行增加一点延迟,但它比任何其他方法都更有效您的意思是总是将请求设置为最新的用户吗?为2。-对但是对于我来说。如果有simila记录,我不想做任何事情。我想如果用户的请求被另一个人覆盖,他会非常生气,对吗?@ajreal no。。。这将由管理员读取,因此没有人关心谁确切地发布请求。实际上我认为用户id可以是一个集合。。。因此,下一个id将被添加到集合中。这是一个好主意,但是,对于MySQL来说,它在语法上并不正确。此外,如果先尝试“insert ignore”并检查最后一个\u insert\u id(假设您的表有一个自动递增字段),则效率会更高。如果返回了一个值,就插入它,这样就完成了。如果为null,则由于匹配的键,插入被忽略,因此执行更新<代码>插入忽略请求(用户id、主题、文本、时间)值(56,‘测试’、‘测试1234’、6516516)代码>当我不能使用唯一索引或不使用ID时,我使用此解决方案,只有您有语法错误,应该有select 56**从任何表格**
是那些@
符号是变量,因为在php中我可以使用美元符号$
,其次,请您解释一下您的查询,我想我知道开始和结束在事务中是什么意思,但是如果和其他,它们是mysql关键字吗?我可以直接在mysqli\u query
函数“重复密钥更新”中使用该查询吗。我们如何根据用户id和主题等两列进行重复检查?这取决于相关字段是否唯一/主要,如果无法插入现有字段,则会进行更新。就你的情况而言,我不确定这个主题有什么独特之处。具有唯一用户id和主题id的表可能会在重复密钥更新时触发。我必须更改表的主键,它可以正常工作。谢谢:)
INSERT INTO requests ('user_id','subject','text','time') VALUES (56,'test','test 1234',6516516)