Upsert - 如果存在则更新else在MySQL中插入

时间:2012-08-27 17:11:42

标签: mysql insert-update

我正在寻找一个简单的upsert(更新/插入)。表格看起来像这样

+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | YES  | PRI | NULL    |       |
| name  | varchar(20) | YES  |     | NULL    |       |
| email | varchar(20) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+

这里没有钥匙。想法是在电子邮件不同时插入,否则更新。 mysql中的Insert on duplicate key不适合此目的。

有优雅的方法吗?

2 个答案:

答案 0 :(得分:3)

如果您无法在电子邮件列中添加唯一键,则会先检查该记录是否存在(最好是在事务中):

SELECT id FROM mytable WHERE email = 'my@example.com' FOR UPDATE

然后更新记录(如果存在):

UPDATE mytable SET name = 'my name' WHERE id = ?

否则插入:

INSERT INTO mytable (name, email) VALUES ('my name', 'my@example.com')

答案 1 :(得分:0)

怎么样:

REPLACE INTO table VALUES(1,'hello', 'world@example.com');