sql >> Database teknologi >  >> RDS >> Mysql

Hvordan tester man en SQL Update-sætning, før man kører den?

Hvad med transaktioner? De har ROLLBACK-funktionen.

@se https://dev.mysql.com/doc/refman /5.0/da/commit.html

For eksempel:

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

Svar på spørgsmål fra @rickozoe nedenfor:

Generelt vil disse linjer ikke blive udført som én gang. I PHP f.e. du ville skrive sådan noget (måske lidt renere, men ville gerne svare hurtigt;-) ):

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

En anden måde ville være at bruge MySQL-variabler (se https:/ /dev.mysql.com/doc/refman/5.7/en/user-variables.htm landhttps://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;

Men jeg vil foreslå at bruge de sprogindpakninger, der er tilgængelige på dit foretrukne programmeringssprog.



  1. NodeJS svarede MySQL-tidszonen er anderledes, når jeg henter direkte fra MySQL

  2. Hvordan opretter man en Postgres-tabel med en unik kombineret primærnøgle?

  3. Hvordan udtrække år, måneder, dage, timer, minutter, sekunder fra en mysql-dato?

  4. PHP - Filtrering efter MySQL-feltværdi