1. ホーム
  2. mysql

[解決済み] 私の `INSERT ...' で2行が影響を受けるのはなぜですか?on duplicate key update`?

2022-11-22 20:13:42

質問

をやっているんです。 INSERT ... ON DUPLICATE KEY UPDATE に対して PRIMARY KEY を以下の表に示します。

DESCRIBE users_interests;

+------------+---------------------------------+------+-----+---------+-------+
| Field      | Type                            | Null | Key | Default | Extra |
+------------+---------------------------------+------+-----+---------+-------+
| uid        | int(11)                         | NO   | PRI | NULL    |       |
| iid        | int(11)                         | NO   | PRI | NULL    |       |
| preference | enum('like','dislike','ignore') | YES  |     | NULL    |       |
+------------+---------------------------------+------+-----+---------+-------+

しかし、これらの値は一意でなければならないにもかかわらず、2行の影響を受けているのがわかります。

INSERT INTO users_interests (uid, iid, preference) VALUES (2, 2, 'like')
ON DUPLICATE KEY UPDATE preference='like';

Query OK, 2 rows affected (0.04 sec)

なぜ、このようなことが起こるのでしょうか?

エディテージ

比較のために、このクエリをご覧ください。

UPDATE users_interests SET preference='like' WHERE uid=2 AND iid=2;

Query OK, 1 row affected (0.44 sec)
Rows matched: 1  Changed: 1  Warnings: 0

どのように解決するのですか?

から マニュアル :

ON DUPLICATE KEY UPDATEでは の場合、1行あたりの影響する行数は1です。 の場合、その行は新しい行として挿入され、2 既存の行が更新された場合。