Wiederholungen bewusst gestalten
Bei einer Zeitüberschreitung ist möglicherweise unklar, ob die Änderung gespeichert wurde. Ein nicht idempotentes INSERT kann beim erneuten Versuch einen doppelten Datensatz erzeugen, obwohl die erste Anfrage erfolgreich war. Nutzen Sie, sofern passend, einen eindeutigen Constraint oder Upsert.
Verwenden Sie für zusammengehörige Änderungen eine Transaktion, wenn der Datenbankvorgang dies unterstützt, damit sie gemeinsam bestätigt oder zurückgerollt werden. Halten Sie Anweisungen eng begrenzt und binden Sie Werte statt SQL aus nicht vertrauenswürdigem Text zusammenzusetzen.
Gespeicherten Zustand bestätigen
Fragen Sie nach einem stabilen Bezeichner und prüfen Sie die aktuelle Zeile, bevor Sie nach einem Verbindungs- oder Workflowfehler erneut schreiben. Eine Zeitüberschreitung beweist nicht, dass nichts gespeichert wurde; unterscheiden Sie Fehler von unklarem Ergebnis.
Protokollieren Sie bei Bedarf Vorgangsschlüssel und Änderungsinformationen im Verlauf. Für externe Nebenwirkungen nutzen Sie eine Outbox oder einen expliziten Statuswechsel, damit Benachrichtigungen oder Zahlungen nicht unbemerkt wiederholt werden.