Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Datenbankbearbeitung mit Genehmigung - mysql

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.