1

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

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

这里没有钥匙。这个想法是如果电子邮件不同则插入,否则更新。在mysql 中插入重复键不适合目的。

有没有一种优雅的方式来做到这一点?

4

2 回答 2

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')
于 2012-08-27T18:28:39.240 回答
0

关于什么:

REPLACE INTO table VALUES(1,'hello', 'world@example.com');
于 2012-08-27T17:13:54.850 回答