2010-09-25 44 views
3

我想更新可能存在或不存在于表中的记录。如果它不存在于数据库中,那么它将被插入。更新记录是否存在; else INSERT

为了防止选择我首先使用UPDATE声明并检查affected_rows > 0如果不是,那么我将此记录插入表中。

我想知道是否有更好的方法来做到这一点?

+0

哪一个更好地替换或插入..重复键? – Jason 2010-09-26 00:22:34

+0

他们的行为有所不同。他们不是“更好”或“更糟糕”,而是不同。 – NullUserException 2010-09-26 00:25:30

回答

5

你可以使用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删除旧行然后插入一个新的行如果一个密钥被复制,而这个更新现有的行。

+0

如果数据库在更换过程中出现故障,该怎么办? – Jason 2010-09-26 00:23:55

+0

此查询不适用于自动生成的数字不是? – Jason 2010-09-26 00:48:35

+0

@Jason是的。只要有一个重复的密钥,它会做'UPDATE' – NullUserException 2010-09-26 01:10:01

相关问题