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.