sql >> Databasteknik >  >> RDS >> Mysql

MYSQL If-sats i transaktionen orsakar fel

MySQL känner inte igen ett påstående som börjar med nyckelordet IF som en giltig SQL-sats.

IF sats fungerar bara i sammanhanget av en sammansatt sats (det vill säga ett block av satser inneslutna mellan BEGIN och END . För närvarande stöds den sammansatta satsen endast i sammanhanget av ett lagrat program (lagrad procedur, funktion eller trigger.)

http://dev.mysql.com/doc/refman /5.5/en/begin-end.html

För att testa, försök...

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;

(OBS:Jag förespråkar inte här att transaktioner ska hanteras inom den lagrade proceduren. Min personliga preferens är att INTE göra detta, utan istället hantera transaktioner på en högre nivå. Men exemplet ovan borde fungera; jag tror att MySQL stöder anropet START TRANSACTION , COMMIT och ROLLBACK inom ramen för en lagrad procedur.)




  1. Hur man tar bort en kolumn från en tabell i MySQL

  2. MySQL välj där kolumnen inte är tom

  3. Förstå index i MySQL:Del två

  4. hur deklarerar man %ROWTYPE för en variabel som är en svagt skriven SYS_REFCURSOR?