我想更新可能存在或不存在于表中的记录。如果它不存在于数据库中,那么它将被插入。更新记录是否存在; else INSERT
为了防止选择我首先使用UPDATE
声明并检查affected_rows > 0
如果不是,那么我将此记录插入表中。
我想知道是否有更好的方法来做到这一点?
我想更新可能存在或不存在于表中的记录。如果它不存在于数据库中,那么它将被插入。更新记录是否存在; else INSERT
为了防止选择我首先使用UPDATE
声明并检查affected_rows > 0
如果不是,那么我将此记录插入表中。
我想知道是否有更好的方法来做到这一点?
你可以使用INSERT ... ON DUPLICATE KEY UPDATE
语法:
INSERT INTO table (a,b,c) VALUES (1,2,3)
ON DUPLICATE KEY UPDATE c=c+1;
http://dev.mysql.com/doc/refman/4.1/en/insert-on-duplicate.html
这和REPLACE
(Femaref的答案)之间的区别是,REPLACE
将删除旧行然后插入一个新的行如果一个密钥被复制,而这个更新现有的行。
如果数据库在更换过程中出现故障,该怎么办? – Jason 2010-09-26 00:23:55
此查询不适用于自动生成的数字不是? – Jason 2010-09-26 00:48:35
@Jason是的。只要有一个重复的密钥,它会做'UPDATE' – NullUserException 2010-09-26 01:10:01
使用Replace
而不是Insert
。
哪一个更好地替换或插入..重复键? – Jason 2010-09-26 00:22:34
他们的行为有所不同。他们不是“更好”或“更糟糕”,而是不同。 – NullUserException 2010-09-26 00:25:30