MySQL không nhận dạng được câu lệnh bắt đầu bằng từ khóa IF
như một câu lệnh SQL hợp lệ.
IF
câu lệnh chỉ hoạt động trong ngữ cảnh của một câu lệnh ghép (nghĩa là một khối câu lệnh nằm giữa BEGIN
và END
. Hiện tại, câu lệnh ghép chỉ được hỗ trợ trong ngữ cảnh của một chương trình được lưu trữ (thủ tục, hàm hoặc trình kích hoạt được lưu trữ.)
http://dev.mysql.com/doc/refman /5.5/en/begin-end.html
Để kiểm tra, hãy thử ...
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;
(LƯU Ý:Tôi không ủng hộ ở đây rằng các giao dịch được xử lý bên trong thủ tục được lưu trữ. Sở thích cá nhân của tôi là KHÔNG làm điều này và thay vào đó xử lý các giao dịch ở cấp độ cao hơn. Nhưng ví dụ trên sẽ hoạt động; Tôi tin rằng MySQL hỗ trợ gọi BẮT ĐẦU GIAO DỊCH , COMMIT và ROLLBACK trong ngữ cảnh của một thủ tục được lưu trữ.)