MySQLは、キーワードIF
で始まるステートメントを認識しません 有効なSQLステートメントとして。
IF
ステートメントは、複合ステートメント(つまり、BEGIN
で囲まれたステートメントのブロック)のコンテキストでのみ機能します。 およびEND
。現在、複合ステートメントは、ストアドプログラム(ストアドプロシージャ、関数、またはトリガー)のコンテキストでのみサポートされています。
http://dev.mysql.com/doc/refman /5.5/en/begin-end.html
テストするには、試してください...
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;
(注:ここでは、トランザクションをストアドプロシージャ内で処理することを推奨していません。個人的な好みは、これを行わず、代わりに、より高いレベルでトランザクションを処理することです。ただし、上記の例は機能するはずです。MySQLはSTARTTRANSACTIONの呼び出しをサポートしていると思います。 、ストアドプロシージャのコンテキスト内でのCOMMITおよびROLLBACK。)