sql >> Base de Datos >  >> RDS >> Mysql

Edición de base de datos con aprobación - mysql

Tenemos algo similar en uno de nuestros sitios, hemos agregado un montón de tablas:

users sites ... etc.

Entonces tenemos un montón de tablas de sombra:

users-shadow sites-shadow ... etc.

Las tablas sombra tienen estructuras idénticas a las tablas reales excepto por una línea añadida para el usuario que realizó el cambio. Entonces, primero usamos esta consulta cuando un usuario envía un cambio que necesita que se aprueben sus acciones en la base de datos:

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

Obviamente, asegúrese de que esto no esté abierto a la inyección, use declaraciones preparadas etc.

Cuando se aprueba, una fila en la shadow la tabla simplemente se elimina de la shadow tabla, el user_mod valor descartado y cambios (valores no nulos) insertados en la tabla real (o actualizados si un id se especifica, usando REPLACE sintaxis). Hacemos esta lógica en Perl, por lo que lamentablemente no tenemos ningún SQL a mano para ello.

Recuerde que SQL REPLACE hace un DELETE y un INSERT en lugar de una UPDATE . Deberá modificar los desencadenantes para permitir este comportamiento.

Nota:la razón por la que no usamos un indicador de 'aprobación' fue que necesitábamos la capacidad de modificar los registros existentes; por supuesto, no podíamos tener varios registros con la misma clave principal.