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 に答える