Nếu bạn muốn "thoát sớm" cho tình huống không có lỗi, thì hãy sử dụng câu trả lời được chấp nhận được đăng bởi @piotrm. Tuy nhiên, thông thường nhất, bạn sẽ được bảo lãnh do một điều kiện lỗi (đặc biệt là trong thủ tục SQL).
Kể từ MySQL v5.5, bạn có thể ném ngoại lệ. Xử lý ngoại lệ phủ nhận, vv sẽ đạt được kết quả tương tự, nhưng theo cách sạch sẽ hơn, sâu sắc hơn.
Đây là cách thực hiện:
DECLARE CUSTOM_EXCEPTION CONDITION FOR SQLSTATE '45000';
IF <Some Error Condition> THEN
SIGNAL CUSTOM_EXCEPTION
SET MESSAGE_TEXT = 'Your Custom Error Message';
END IF;
Lưu ý SQLSTATE '45000'
tương đương với "Điều kiện ngoại lệ do người dùng xác định". Theo mặc định, điều này sẽ tạo ra một mã lỗi 1644
(có cùng ý nghĩa). Lưu ý rằng bạn có thể ném các mã điều kiện hoặc mã lỗi khác nếu muốn (cộng với các chi tiết bổ sung để xử lý ngoại lệ).
Để biết thêm về chủ đề này, hãy xem:
https://dev.mysql.com/doc/refman/5.5/en/signal.html
Cách phát sinh lỗi trong hàm MySQL
http://www.databasejournal.com/features/mysql/mysql-error-handling-USE-the-signal-and-resignal-statements.html
Phụ lục
Khi tôi đọc lại bài đăng này của tôi, tôi nhận ra rằng tôi có thêm một cái gì đó để thêm. Trước MySQL v5.5, có một cách để giả lập ném ngoại lệ. Chính xác thì đây không phải là điều tương tự, nhưng đây là điều tương tự: Tạo lỗi thông qua việc gọi một thủ tục không tồn tại. Gọi thủ tục bằng một tên có ý nghĩa để có được một phương tiện hữu ích để xác định vấn đề là gì. Khi xảy ra lỗi, bạn sẽ thấy dòng lỗi (tùy thuộc vào bối cảnh thực hiện của bạn).
Ví dụ:
CALL AttemptedToInsertSomethingInvalid;
Lưu ý rằng khi bạn tạo một thủ tục, không có xác nhận được thực hiện trên những thứ đó. Vì vậy, trong khi ở một thứ như ngôn ngữ được biên dịch, bạn không bao giờ có thể gọi một hàm không có ở đó, trong một kịch bản như thế này, nó sẽ đơn giản thất bại trong thời gian chạy, đó chính xác là điều mong muốn trong trường hợp này!
IF tablename IS NOT NULL THEN
...;)