Mysql
 sql >> Database >  >> RDS >> Mysql

Modifica database con approvazione - mysql

Abbiamo qualcosa di simile su uno dei nostri siti, abbiamo aggiunto un sacco di tabelle:

users sites ... ecc

Quindi abbiamo un sacco di tabelle ombra:

users-shadow sites-shadow ... ecc

Le tabelle shadow hanno strutture identiche alle tabelle reali ad eccezione di una riga aggiunta per l'utente che ha apportato la modifica. Quindi per prima cosa utilizziamo questa query quando una modifica viene inviata da un utente che ha bisogno dell'approvazione delle sue azioni sul database:

REPLACE INTO users-shadow (user_mod,id,username,password,salt...) VALUES (16,50,'bob','stuff','salt'...);

Ovviamente, assicurati che questo non sia aperto all'iniezione, usa dichiarazioni preparate ecc.

Una volta approvato, una riga in shadow la tabella viene semplicemente rimossa da shadow tabella, il user_mod valore eliminato e modifiche (valori non nulli) inserite nella tabella reale (o aggiornate se un id è specificato, utilizzando REPLACE sintassi). Facciamo questa logica in Perl, quindi purtroppo non abbiamo alcun SQL a portata di mano per questo.

Ricorda che SQL REPLACE esegue un DELETE e un INSERT piuttosto che un UPDATE . Dovrai modificare tutti i trigger per consentire questo comportamento.

Nota:il motivo per cui non abbiamo utilizzato un flag "approva" era che avevamo bisogno della possibilità di modificare i record esistenti, ovviamente non potevamo avere più record con la stessa chiave primaria.