検討する
INSERT INTO table (a,b,c) VALUES (1,2,3)
-> ON DUPLICATE KEY UPDATE c=c+1;
aとbがUNIQUE
の場合 フィールド、UPDATE
a = 1 OR b = 2
で発生します 。条件a = 1 OR b = 2
の場合も 2つ以上のエントリが満たされている場合、更新は1回だけ行われます。
ここに、IDと名前がUNIQUE
のテーブルテーブルがあります。 フィールド
Id Name Value
1 P 2
2 C 3
3 D 29
4 A 6
クエリが
の場合INSERT INTO table (Id, Name, Value)
VALUES (1, C, 7);
次に
Id Name Value
1 P 2
2 C 3
3 D 29
4 A 6
1 C 7
これは、IDと名前の一意性に違反します。今
INSERT INTO table (Id, Name, Value)
VALUES (1, C, 7)
ON DUPLICATE KEY UPDATE Value = 7;
取得します
Id Name Value
1 P 7
2 C 7
3 D 29
4 A 6
複数のキーでの動作は次のとおりです
UPDATE
ON DUPLICATE KEY UPDATE
UNIQUE
のいずれかが実行される場合 フィールドは挿入される値と同じです。ここで、UPDATE
Id = 1 OR Name = C
で実行されます 。
UPDATE table
SET Value = 7
WHERE Id = 1 OR Name = C;
どちらかのキーについて、1つの更新のみが必要な場合はどうなりますか
UPDATE
を使用できます LIMIT
を含むステートメント キーワード
UPDATE table
SET Value = 7
WHERE Id = 1 OR Name = C
LIMIT 1;
与えるだろう
Id Name Value
1 P 7
2 C 3
3 D 29
4 A 6
両方のキーの値が一致する場合にのみ1つの更新が必要な場合はどうなりますか
1つの解決策は、ALTER TABLE
PRIMARY KEY
を作成します (または独自性)両方の分野で機能します。
ALTER TABLE table
DROP PRIMARY KEY,
ADD PRIMARY KEY (Id, Name);
さて、
INSERT INTO table (Id, Name, Value)
VALUES (1, C, 7)
ON DUPLICATE KEY UPDATE Value = 7;
取得します
Id Name Value
1 P 2
2 C 3
3 D 29
4 A 6
1 C 7
(両方のキーに)重複が見つからないため。