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

Como testar uma instrução SQL Update antes de executá-la?


E as transações? Eles têm o recurso ROLLBACK.

@veja https://dev.mysql.com/doc/refman /5.0/en/commit.html

Por exemplo:
START TRANSACTION;
SELECT * FROM nicetable WHERE somthing=1;
UPDATE nicetable SET nicefield='VALUE' WHERE somthing=1;
SELECT * FROM nicetable WHERE somthing=1; #check

COMMIT;
# or if you want to reset changes 
ROLLBACK;

SELECT * FROM nicetable WHERE somthing=1; #should be the old value

Resposta à pergunta de @rickozoe abaixo:


Em geral, essas linhas não serão executadas uma única vez. Em PHP f.e. você escreveria algo assim (talvez um pouco mais limpo, mas queria responder rápido;-) ):
$MysqlConnection->query('START TRANSACTION;');
$erg = $MysqlConnection->query('UPDATE MyGuests SET lastname='Doe' WHERE id=2;');
if($erg)
    $MysqlConnection->query('COMMIT;');
else
    $MysqlConnection->query('ROLLBACK;');

Outra maneira seria usar variáveis ​​do MySQL (consulte https:/ /dev.mysql.com/doc/refman/5.7/en/user-variables.htm terrenohttps://stackoverflow.com/a/18499823/1416909 ):
# do some stuff that should be conditionally rollbacked later on

SET @v1 := UPDATE MyGuests SET lastname='Doe' WHERE id=2;
IF(v1 < 1) THEN
    ROLLBACK;
ELSE
    COMMIT;
END IF;

Mas eu sugiro usar os wrappers de linguagem disponíveis em sua linguagem de programação favorita.