我总是使用检查表的方法来查看是否存在行,然后使用我的新数据更新它,或者如果它不存在则插入它,但它让我想到了简单的错误进行更新,如果没有行受到影响,那么执行一个insert语句,这可能会加速我的脚本并减少服务器上的负担。
有人预见到有任何问题吗?
答案 0 :(得分:3)
REPLACE出了什么问题?
REPLACE的工作原理与INSERT完全相同,只是如果表中的旧行与PRIMARY KEY或UNIQUE索引的新行具有相同的值,则在插入新行之前删除旧行。
答案 1 :(得分:2)
如果通过“查看是否存在行”是指主键,您可能会对12.2.5.3. INSERT ... ON DUPLICATE KEY UPDATE Syntax感兴趣:
如果指定ON DUPLICATE KEY UPDATE,并插入一行 会导致a中的重复值 UNIQUE索引或PRIMARY KEY,UPDATE 执行旧行。对于 例如,如果列a被声明为 UNIQUE并包含值1,the 以下两个陈述有 相同的效果:
INSERT INTO table (a,b,c) VALUES (1,2,3)
ON DUPLICATE KEY UPDATE c=c+1;
UPDATE table SET c=c+1 WHERE a=1;
也许你可以用它?
与你所说的相比,tt正在做另外一种方式:试图插入,如果有DUPLICATE KEY错误,它会更新线......但它允许你不检查线是否先存在。
但是,它只适用于主键/唯一索引;没有任何where子句。
答案 2 :(得分:1)
REPLACE语句执行相同的操作,如果某行不存在则会插入它,如果存在则会更新它。
答案 3 :(得分:0)
INSERT IGNORE在这里也很有用。