Mysql
 sql >> Base de données >  >> RDS >> Mysql

Modifier la base de données avec approbation - mysql

Nous avons quelque chose de similaire sur l'un de nos sites, nous avons ajouté un tas de tableaux :

users sites ...etc

Ensuite, nous avons un tas de tables fantômes :

users-shadow sites-shadow ...etc

Les tables fantômes ont des structures identiques aux tables réelles à l'exception d'une ligne ajoutée pour l'utilisateur qui a effectué la modification. Nous utilisons donc d'abord cette requête lorsqu'une modification est soumise par un utilisateur qui doit faire approuver ses actions de base de données :

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

Évidemment, assurez-vous que ce n'est pas ouvert à l'injection, utilisez déclarations préparées etc.

Une fois approuvé, une ligne dans le shadow la table est simplement supprimée du shadow table, le user_mod valeur supprimée et modifications (valeurs non nulles) insérées dans la table réelle (ou mise à jour si un id est spécifié, en utilisant REPLACE syntaxe). Nous faisons cette logique en perl, donc malheureusement, nous n'avons pas de SQL sous la main pour cela.

N'oubliez pas que SQL REPLACE fait un DELETE et un INSERT plutôt qu'une UPDATE . Vous devrez modifier tous les déclencheurs pour permettre ce comportement.

Remarque :La raison pour laquelle nous n'avons pas utilisé d'indicateur "approuver" était que nous avions besoin de la possibilité de modifier les enregistrements existants, bien sûr, nous ne pouvions pas avoir plusieurs enregistrements avec la même clé primaire.