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

MYSQL If-sætning i transaktion, der forårsager fejl

MySQL genkender ikke et udsagn, der begynder med søgeordet IF som en gyldig SQL-sætning.

IF sætning virker kun i konteksten af ​​en sammensat sætning (det vil sige en blok af sætninger indesluttet mellem BEGIN og END . I øjeblikket understøttes den sammensatte sætning kun i sammenhæng med et lagret program (lagret procedure, funktion eller trigger).

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

For at teste, prøv...

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;

(BEMÆRK:Jeg går ikke ind for her, at transaktioner skal håndteres inde i den lagrede procedure. Min personlige præference er IKKE at gøre dette, og i stedet håndtere transaktioner på et højere niveau. Men eksemplet ovenfor burde fungere; jeg mener, at MySQL understøtter kaldet START TRANSACTION , COMMIT og ROLLBACK inden for konteksten af ​​en lagret procedure.)




  1. to ord og tomme mellemrum fungerer ikke i MYSQL-forespørgsel ved hjælp af LIKE

  2. Sådan vælger du et dynamisk tabelnavn

  3. Angiv manuelt værdien af ​​en primær nøgle i kolonnen JPA @GeneratedValue

  4. Sådan finder du gennemsnittet af en numerisk kolonne i SQL