Oft möchte ich einen Wert zu einer Tabelle hinzufügen oder den Wert aktualisieren, wenn der Schlüssel bereits existiert. Dazu gibt es mehrere Möglichkeiten, vorausgesetzt, in den Spalten "user_id" und "pref_key" im Beispiel ist ein Primärschlüssel oder eindeutiger Schlüssel festgelegt:
1. Blindes Einfügen, Aktualisieren, wenn ein Fehler mit doppelten Schlüsseln auftritt:
// Try to insert as a new value
INSERT INTO my_prefs
(user_id, pref_key, pref_value)
VALUES (1234, 'show_help', 'true');
// If a duplicate-key error occurs run an update query
UPDATE my_prefs
SET pref_value = 'true'
WHERE user_id=1234 AND pref_key='show_help';
2. Prüfen Sie, ob es vorhanden ist, und wählen Sie dann oder aktualisieren Sie:
// Check for existence
SELECT COUNT(*)
FROM my_prefs
WHERE user_id=1234 AND pref_key='show_help';
// If count is zero, insert
INSERT INTO my_prefs
(user_id, pref_key, pref_value)
VALUES (1234, 'show_help', 'true');
// If count is one, update
UPDATE my_prefs
SET pref_value = 'true'
WHERE user_id=1234 AND pref_key='show_help';
Die erste Methode scheint vorzuziehen zu sein, da sie nur eine Abfrage für neue Einfügungen und zwei für eine Aktualisierung erfordert, während die zweite Methode immer zwei Abfragen erfordert. Gibt es irgendetwas, das ich übersehe, das es zu einer schlechten Idee machen würde, blind einzufügen?