Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Instrukcja MYSQL If w transakcji powodująca błąd

MySQL nie rozpoznaje instrukcji zaczynającej się od słowa kluczowego IF jako poprawna instrukcja SQL.

IF Instrukcja działa tylko w kontekście instrukcji złożonej (tj. bloku instrukcji zawartego między BEGIN i END . Obecnie instrukcja złożona jest obsługiwana tylko w kontekście programu składowanego (procedury składowanej, funkcji lub wyzwalacza).

http://dev.mysql.com/doc/refman /5.5/pl/początek-koniec.html

Aby przetestować, spróbuj...

DELIMITER //

CREATE PROCEDURE usp_test_transaction()
BEGIN
  DECLARE EXIT HANDLER FOR SQLEXCEPTION ROLLBACK;
  START TRANSACTION;

  -- whatever DML operations and SELECT statements you want to perform go here

  IF (1=1) THEN
    COMMIT;
  ELSE
    ROLLBACK;
  END IF;
END//

DELIMITER ;

CALL usp_test_transaction;

(UWAGA:nie opowiadam się tutaj, aby transakcje były obsługiwane w ramach procedury składowanej. Osobiście wolę tego NIE robić, a zamiast tego obsługiwać transakcje na wyższym poziomie. Ale powyższy przykład powinien działać; uważam, że MySQL obsługuje wywoływanie START TRANSACTION , COMMIT i ROLLBACK w kontekście procedury składowanej.)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL o stałej wartości IN() a wydajność INNER JOIN

  2. Wdrażanie twittera i facebooka jak hashtagi

  3. Pobierz wiersz z najwyższą lub najniższą wartością z GROUP BY

  4. Wypełnianie listy rozwijanej na podstawie poprzedniego wyboru

  5. Python:Jak uzyskać czas z obiektu datetime.timedelta?