Betrachten
INSERT INTO table (a,b,c) VALUES (1,2,3)
-> ON DUPLICATE KEY UPDATE c=c+1;
, wenn a und b UNIQUE
Felder sind, UPDATE
tritt auf a = 1 OR b = 2
. Auch wenn die Bedingung a = 1 OR b = 2
durch zwei oder mehr Einträge erfüllt ist, wird die Aktualisierung nur einmal durchgeführt.
Ex hier Tabelle Tabelle mit ID und den Namen UNIQUE
Felder
Id Name Value
1 P 2
2 C 3
3 D 29
4 A 6
Wenn Abfrage
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
die Einzigartigkeit von Id und Namen 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
Verhalten auf mehreren Tasten ist die folgende
UPDATE
in ON DUPLICATE KEY UPDATE
durchgeführt wird, wenn eine der UNIQUE
Feld den Wert gleich eingefügt werden. Hier wird UPDATE
unter Id = 1 OR Name = C
ausgeführt.Es entspricht
UPDATE table
SET Value = 7
WHERE Id = 1 OR Name = C
Was passiert, wenn ich nur ein Update wollen, für jede der beiden Tasten
UPDATE
Anweisung mit LIMIT
Stichwort
UPDATE table
SET Value = 7
WHERE Id = 1 OR Name = C
LIMIT 1;
die
Id Name Value
1 P 7
2 C 3
3 D 29
4 A 6
geben verwenden können
Was passiert, wenn ich nur ein Update wollen, wenn Werte für beide Tasten
Eine Lösung abgestimmt sind, ist zu ALTER TABLE
und die PRIMARY KEY
(oder Einzigartigkeit) machen auf beiden Feldern arbeiten.
ALTER TABLE table
DROP PRIMARY KEY
ADD PRIMARY KEY (Id, Name);
nun 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 Tasten) gefunden wird.
Wenn Sie eine Tabelle mit zwei Spalten als Primärschlüssel haben, und wollen mit der ON DUPLICATE KEY arbeiten, vermeiden müssen einen eindeutigen Index für die pk Spalten hinzufügen, da dies zu aktualisieren, wenn pk1 oder pk2 sind in den Werten vorhanden. – jloria
Gibt es eine Möglichkeit, eine eindeutige Einschränkung für die zweite Spalte zu haben, aber so, dass sie diese doppelte Schlüsselaktualisierung nicht beeinflusst? Dies bedeutet, dass das Einfügen oder Aktualisieren fehlschlägt, wenn die eindeutige Einschränkung nicht erfüllt ist. – CMCDragonkai