MySQL “good” way to insert a row if not found, or update it if it is found

余生颓废 提交于 2019-11-28 05:59:43

You can use "REPLACE INTO" or "INSERT… ON DUPLICATE KEY UPDATE". I believe the second is what you want, but there are situations where REPLACE INTO is convenient.

defines

From my other Stack Overflow answer:

If you want to do this in a single statement, I would recommend using the INSERT ... ON DUPLICATE KEY UPDATE syntax, as follows:

INSERT INTO table (id, someothervalue) VALUES (1, 'hi mom')
  ON DUPLICATE KEY UPDATE someothervalue = 'hi mom';

The initial INSERT statement will execute if there is no existing record with the specified key value (either primary key or unique). If a record already exists, the following UPDATE statement (someothervalue = 3) is executed.

This is supported in all versions of MySQL. For more info, see the MySQL Reference Manual page for INSERT ... ON DUPLICATE KEY UPDATE

Andrew Barnett

This is called an UPSERT (UPdate or inSERT). There are a number of SO questions about it you can search for. See Wikipedia

EDIT: MySQL 4.1+ supports INSATE (INSert or updATE), which should get you the same thing, as long as you have a primary key. MySQL Manual

I think it's easier to switch it around. Try to insert, then update.

MySQL specifically has a clause 'ON DUPLICATE KEY'

INSERT INTO cars (fields) VALUES (values) ON DUPLICATE KEY UPDATE ...

This of course requires you to have proper unique keys setup.

In Oracle you have Merge.

No idea on MySql, but the term might give you something else to search.

an example of how I have used ON DUPLICATE KEY UPDATE: INSERT INTO registry (name, value) VALUES ('" . $key . "', '" . $val . "') ON DUPLICATE KEY UPDATE value= '" . $val . "'"

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!