INSERT INTO … ON DUPLICATE KEY UPDATE
работи по следния начин:
- опитва се да вмъкне ред както обикновено
- ако възникне нарушение на ограничение в която и да е колона, той изпълнява
UPDATE
израз вместо на съществуващия ред, с койтоINSERT
противоречиво изявление
Това просто означава, че ако UPDATE
сам операторът би бил успешен, неговият ON DUPLICATE KEY UPDATE
еквивалентът също ще работи. Това означава, че очевидно не можете да нарушите никакви ограничения в UPDATE
или всичко ще се провали (напр. опит за задаване на стойност на UNIQUE
колона, която вече съществува в друг ред).
Ако зададете същата стойност в същата колона отново, това по същество е без операция. Стойността в колоната не се променя и следователно също не може да причини грешки (да приемем, че нямате наистина фънки BEFORE UPDATE
тригери, които могат да се държат неправилно). Броят на колоните тук е без значение, можете да промените толкова или колкото по-малко в един израз, колкото искате.