sql >> Databáze >  >> RDS >> Mysql

Jak otestovat příkaz SQL Update před jeho spuštěním?

A co transakce? Mají funkci ROLLBACK.

@viz https://dev.mysql.com/doc/refman /5.0/cs/commit.html

Například:

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

Odpovězte na otázku od @rickozoe níže:

Obecně tyto řádky nebudou provedeny jako jednou. V PHP např. napsal bys něco takového (možná trochu čistěji, ale chtěl jsem rychle odpovědět;-) ):

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

Dalším způsobem by bylo použití proměnných MySQL (viz https:/ /dev.mysql.com/doc/refman/5.7/en/user-variables.htm pozemekhttps://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;

Navrhoval bych však použít jazykové obaly dostupné ve vašem oblíbeném programovacím jazyce.



  1. Kolik platných číslic bych měl uložit do databáze pro souřadnice GPS?

  2. Nelze se připojit k databázi Oracle pomocí JDBC, pokud heslo obsahuje speciální znaky

  3. Aktualizujte více řádků pomocí několika klauzulí „kde“ pro každý jednotlivý řádek

  4. Vytvořte vlastní způsob dopravy v OpenCart:Část druhá