Em alguns casos, a execução de uma instrução UPDATE na produção pode salvar o dia. No entanto, uma atualização do Borked pode ser pior do que o problema inicial.
Além de usar um banco de dados de teste, quais são as opções para dizer o que uma instrução de atualização fará antes de executá-la?
FOREIGN KEY UPDATE CASCADE
seu sql falharE sobre as transações? Eles têm o recurso ROLLBACK.
@see https://dev.mysql.com/doc/refman/5.0/en/commit.html
Por exemplo:
Resposta à pergunta de @rickozoe abaixo:
Em geral, essas linhas não serão executadas uma vez. Em PHP, você escreveria algo assim (talvez um pouco mais limpo, mas queria uma resposta rápida ;-)):
Outra maneira seria usar variáveis MySQL (consulte https://dev.mysql.com/doc/refman/5.7/en/user-variables.htm l e https://stackoverflow.com/a/18499823/1416909 ):
Mas eu sugiro usar os wrappers de linguagem disponíveis em sua linguagem de programação favorita.
fonte
Autocommit OFF ...
MySQL
Ele ativa o autommit off para a sessão atual.
Você executa sua instrução, vê o que mudou e então faz o rollback se estiver errado ou efetua o commit se for o que você esperava!
EDITAR: A vantagem de usar transações em vez de executar a consulta de seleção é que você pode verificar o conjunto resultante mais facilmente.
fonte
Eu sei que isso é uma repetição de outras respostas, mas tem algum suporte emocional para dar um passo extra para atualização de teste: D
Para atualização de teste, hash # é seu amigo.
Se você tiver uma declaração de atualização como:
Você hash UPDATE e SET para teste e, em seguida, hash de volta:
Funciona para declarações simples.
Uma solução adicional praticamente obrigatória é obter uma cópia (duplicado de backup), sempre que utilizar atualização em uma tabela de produção. Phpmyadmin> operações> cópia: table_yearmonthday. Leva apenas alguns segundos para tabelas <= 100M.
fonte
Não é uma resposta direta, mas já vi muitas situações de dados prod borked que poderiam ter sido evitadas digitando a
WHERE
cláusula primeiro ! Às vezes, umWHERE 1 = 0
pode ajudar a montar uma declaração de trabalho com segurança também. E observar um plano de execução estimado, que estimará as linhas afetadas, pode ser útil. Além disso, em uma transação que você reverte como outros já disseram.fonte
WHERE 1 = 0
seja mais portátil se alguém encontrar isso trabalhando com um DBMS diferente. Por exemplo, o SQL Server não aceitaWHERE FALSE
.Nestes casos que você deseja testar, é uma boa ideia se concentrar apenas nos valores da coluna atual e que serão atualizados em breve .
Por favor, dê uma olhada no seguinte código que escrevi para atualizar os preços WHMCS:
Desta forma, comparamos claramente os valores já existentes com os novos valores.
fonte
Execute a consulta de seleção na mesma tabela com todas as
where
condições que você está aplicando na consulta de atualização.fonte
faça um
SELECT
disso,como se você tivesse
UPDATE users SET id=0 WHERE name='jan'
convertê-lo para
SELECT * FROM users WHERE name='jan'
fonte