Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment tester une instruction SQL Update avant de l'exécuter ?

Qu'en est-il des transactions ? Ils ont la fonctionnalité ROLLBACK.

@voir https://dev.mysql.com/doc/refman /5.0/fr/commit.html

Par exemple :

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

Répondez à la question de @rickozoe ci-dessous :

En général ces lignes ne seront pas exécutées une seule fois. En PHP par ex. vous écririez quelque chose comme ça (peut-être un peu plus propre, mais je voulais répondre rapidement;-) ):

$MysqlConnection->query('START TRANSACTION;');
$erg = $MysqlConnection->query('UPDATE MyGuests SET lastname='Doe' WHERE id=2;');
if($erg)
    $MysqlConnection->query('COMMIT;');
else
    $MysqlConnection->query('ROLLBACK;');

Une autre façon serait d'utiliser les variables MySQL (voir https:/ /dev.mysql.com/doc/refman/5.7/en/user-variables.htm atterrir ):

# 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;

Mais je suggérerais d'utiliser les wrappers de langage disponibles dans votre langage de programmation préféré.