Betrachten Sie
INSERT INTO table (a,b,c) VALUES (1,2,3)
-> ON DUPLICATE KEY UPDATE c=c+1;
Wenn a und b UNIQUE
sind Felder, UPDATE
tritt auf bei a = 1 OR b = 2
. Auch wenn Bedingung a = 1 OR b = 2
von zwei oder mehr Einträgen erfüllt wird, erfolgt die Aktualisierung nur einmal.
Bsp hier Tabelle Tabelle mit Id und Name UNIQUE
Felder
Id Name Value
1 P 2
2 C 3
3 D 29
4 A 6
Wenn Abfrage ist
INSERT INTO table (Id, Name, Value)
VALUES (1, C, 7);
dann bekommen wir
Id Name Value
1 P 2
2 C 3
3 D 29
4 A 6
1 C 7
was die Eindeutigkeit von ID und Name verletzt. Jetzt mit
INSERT INTO table (Id, Name, Value)
VALUES (1, C, 7)
ON DUPLICATE KEY UPDATE Value = 7;
wir bekommen
Id Name Value
1 P 7
2 C 7
3 D 29
4 A 6
Das Verhalten bei mehreren Tasten ist wie folgt
UPDATE
in ON DUPLICATE KEY UPDATE
wird durchgeführt, wenn einer der UNIQUE
Feld gleich dem einzufügenden Wert. Hier UPDATE
wird auf Id = 1 OR Name = C
durchgeführt . Es ist äquivalent zu
UPDATE table
SET Value = 7
WHERE Id = 1 OR Name = C;
Was ist, wenn ich nur ein Update für beide Schlüssel möchte
Kann UPDATE
verwenden Anweisung mit LIMIT
Schlüsselwort
UPDATE table
SET Value = 7
WHERE Id = 1 OR Name = C
LIMIT 1;
was geben wird
Id Name Value
1 P 7
2 C 3
3 D 29
4 A 6
Was ist, wenn ich nur eine Aktualisierung möchte, wenn die Werte für beide Schlüssel übereinstimmen
Eine Lösung ist ALTER TABLE
und machen Sie den PRIMARY KEY
(oder Eindeutigkeit) arbeiten auf beiden Feldern.
ALTER TABLE table
DROP PRIMARY KEY,
ADD PRIMARY KEY (Id, Name);
Jetzt auf
INSERT INTO table (Id, Name, Value)
VALUES (1, C, 7)
ON DUPLICATE KEY UPDATE Value = 7;
wir bekommen
Id Name Value
1 P 2
2 C 3
3 D 29
4 A 6
1 C 7
da kein Duplikat (auf beiden Schlüsseln) gefunden wird.