Overvej
INSERT INTO table (a,b,c) VALUES (1,2,3)
-> ON DUPLICATE KEY UPDATE c=c+1;
Hvis a og b er UNIQUE felter, UPDATE forekommer på a = 1 OR b = 2 . Også når betingelse a = 1 OR b = 2 er opfyldt af to eller flere poster, opdateres kun én gang.
Eks her tabeltabel med id og navn UNIQUE felter
Id Name Value
1 P 2
2 C 3
3 D 29
4 A 6
Hvis forespørgslen er
INSERT INTO table (Id, Name, Value)
VALUES (1, C, 7);
så får vi
Id Name Value
1 P 2
2 C 3
3 D 29
4 A 6
1 C 7
som krænker entydigheden af id og navn. Nu med
INSERT INTO table (Id, Name, Value)
VALUES (1, C, 7)
ON DUPLICATE KEY UPDATE Value = 7;
vi får
Id Name Value
1 P 7
2 C 7
3 D 29
4 A 6
Adfærd på flere taster er følgende
UPDATE i ON DUPLICATE KEY UPDATE udføres, hvis en af UNIQUE felt er lig med den værdi, der skal indsættes. Her UPDATE udføres på Id = 1 OR Name = C . Det svarer til
UPDATE table
SET Value = 7
WHERE Id = 1 OR Name = C;
Hvad nu hvis jeg kun vil have én opdatering, for begge nøgler
Kan bruge UPDATE sætning med LIMIT søgeord
UPDATE table
SET Value = 7
WHERE Id = 1 OR Name = C
LIMIT 1;
som vil give
Id Name Value
1 P 7
2 C 3
3 D 29
4 A 6
Hvad hvis jeg kun vil have én opdatering, hvis værdierne for begge nøgler matches
En løsning er at ALTER TABLE og lav PRIMARY KEY (eller unikke) arbejde på begge områder.
ALTER TABLE table
DROP PRIMARY KEY,
ADD PRIMARY KEY (Id, Name);
Nu videre
INSERT INTO table (Id, Name, Value)
VALUES (1, C, 7)
ON DUPLICATE KEY UPDATE Value = 7;
vi får
Id Name Value
1 P 2
2 C 3
3 D 29
4 A 6
1 C 7
da der ikke findes nogen duplikat (på begge nøgler).