Eu quero rastrear o histórico de alterações para um usuário, para que, sempre que ele altere seu perfil, eu precise pegar os dados antigos, armazenar no histórico e atualizar com novos dados.
Eu posso usar a select
para obter os dados antigos, insert
para o histórico e, finalmente, update
para alterar os dados.
posso ter tudo isso em uma única consulta no mysql sem usar procedimentos armazenados, gatilhos, etc. como usar bloqueios etc. se assim for, me dê uma pequena amostra.
Respostas:
Para fazer isso sem o risco de bloquear outro usuário tentando atualizar o mesmo perfil, ao mesmo tempo, você precisa bloquear a linha em
t1
primeiro lugar, em seguida, usar uma transação (como aponta Rolando nos comentários à sua pergunta):fonte
Não acredito que haja uma maneira de combinar todas as três afirmações. A coisa mais próxima disso realmente não ajuda, e isso é um SET SELECT. Sua melhor aposta é um gatilho. Abaixo está um exemplo de um gatilho que eu costumo usar para manter exatamente essa trilha de auditoria (construída com PHP):
fonte
Descobri que esta consulta funciona em servidores SQL e MySQL
INSERT INTO t2 SELECT * FROM t1 WHERE id=10; UPDATE t1 SET id=11 WHERE id=10;
Espero que isso seja útil para outras pessoas também no futuro.
fonte