我正在寻找一个简单的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不适合此目的。
有优雅的方法吗?
答案 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');