Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Edição de banco de dados com aprovação - mysql


Temos algo semelhante em um de nossos sites, adicionamos várias tabelas:

users sites ... etc

Então temos um monte de tabelas de sombra:

users-shadow sites-shadow ... etc

As tabelas de sombra têm estruturas idênticas às tabelas reais, exceto por uma linha adicionada para o usuário que fez a alteração. Então, primeiro usamos essa consulta quando uma alteração é enviada por um usuário que precisa ter suas ações de banco de dados aprovadas:
REPLACE INTO users-shadow (user_mod,id,username,password,salt...) VALUES (16,50,'bob','stuff','salt'...);

Obviamente, certifique-se de que não esteja aberto para injeção, use declarações preparadas etc.

Quando aprovado, uma linha na shadow A tabela é simplesmente removida da shadow tabela, o user_mod valor descartado e alterações (valores não nulos) inseridas na tabela real (ou atualizadas se um id é especificado, usando REPLACE sintaxe). Nós fazemos essa lógica em perl, então infelizmente não temos nenhum SQL disponível para isso.

Lembre-se que SQL REPLACE faz um DELETE e um INSERT em vez de um UPDATE . Você precisará alterar quaisquer gatilhos para permitir esse comportamento.

Observação:o motivo pelo qual não usamos um sinalizador "aprovar" foi que precisávamos da capacidade de alterar os registros existentes. É claro que não poderíamos ter vários registros com a mesma chave primária.