Wir haben etwas Ähnliches auf einer unserer Seiten, wir haben ein paar Tabellen hinzugefügt:
users
sites
... usw
Dann haben wir ein paar Schattentabellen:
users-shadow
sites-shadow
... usw
Die Schattentabellen haben bis auf eine hinzugefügte Zeile für den Benutzer, der die Änderung vorgenommen hat, identische Strukturen wie die echten Tabellen. Also verwenden wir diese Abfrage zuerst, wenn eine Änderung von einem Benutzer eingereicht wird, der seine/ihre Datenbankaktionen genehmigen lassen muss:
REPLACE INTO users-shadow (user_mod,id,username,password,salt...) VALUES (16,50,'bob','stuff','salt'...);
Stellen Sie sicher, dass dies nicht offen für Injektionen ist, verwenden Sie vorbereitete Erklärungen usw.
Wenn genehmigt, eine Zeile im shadow
Tabelle wird einfach aus dem shadow
entfernt Tabelle, der user_mod
Wert gelöscht und Änderungen (Nicht-Null-Werte) in die reale Tabelle eingefügt (oder aktualisiert, wenn eine id
angegeben wird, indem REPLACE
verwendet wird Syntax). Wir machen diese Logik in Perl, also haben wir leider kein SQL dafür zur Hand.
Denken Sie daran, dass SQL REPLACE
macht ein DELETE
und ein INSERT
statt eines UPDATE
. Sie müssen alle Auslöser ändern, um dieses Verhalten zu ermöglichen.
Hinweis:Der Grund, warum wir kein 'Genehmigen'-Flag verwendet haben, war, dass wir die Möglichkeit brauchten, bestehende Datensätze zu ändern, natürlich konnten wir nicht mehrere Datensätze mit demselben Primärschlüssel haben.