Computer >> Máy Tính >  >> Lập trình >> MySQL

Làm cách nào chúng ta có thể sử dụng câu lệnh SIGNAL với các trình kích hoạt MySQL?


Trên thực tế, câu lệnh MySQL SIGNAL là một cơ chế xử lý lỗi để xử lý các sự cố không mong muốn và thoát khỏi ứng dụng nếu cần. Về cơ bản, nó cung cấp thông tin lỗi cho trình xử lý. Cú pháp cơ bản của nó sẽ như sau -

SIGNAL SQLSTATE | condition_value
[SET signal_information_item = value_1,[, signal_information_item] = value_2,
etc;]

Ở đây, từ khóa SIGNAL là giá trị SQLSTATE hoặc tên điều kiện được khai báo bởi câu lệnh DECLARE CONDITION. Câu lệnh SIGNAL phải luôn chỉ định một giá trị SQLSTATE hoặc một điều kiện được đặt tên được xác định bằng một giá trị SQLSTATE. Giá trị SQLSTATE cho một câu lệnh SIGNAL bao gồm một mã gồm năm ký tự chữ và số. Chúng ta không được bắt đầu mã SQLSTATE của riêng mình bằng '00' vì các giá trị như vậy cho biết thành công và không hợp lệ để báo hiệu lỗi. Nếu giá trị của chúng tôi không hợp lệ, lỗi SQLSTATE Xấu sẽ xảy ra. Để xử lý lỗi nhận toàn bộ, chúng ta nên gán giá trị SQLSTATE là '45000', giá trị này biểu thị một “ngoại lệ không được xử lý do người dùng xác định.”

Để minh họa việc sử dụng câu lệnh SIGNAL với trình kích hoạt MySQL, chúng tôi đang sử dụng ví dụ sau, trong đó chúng tôi đang tạo CHÈN TRƯỚC kích hoạt trên bảng student_age. Nó sẽ đưa ra một thông báo lỗi bằng cách sử dụng câu lệnh SIGNAL nếu chúng ta cố gắng nhập độ tuổi nhỏ hơn 0.

Ví dụ

mysql> Create trigger before_insert_studentage BEFORE INSERT on
student_age FOR EACH ROW BEGIN IF NEW.age<0 then SIGNAL SQLSTATE
'45000' SET MESSAGE_TEXT = 'age less than 0'; END if; END; //
Query OK, 0 rows affected (0.12 sec)

mysql> Insert into student_age(age, name) values(-10,'gaurav')//
ERROR 1644 (45000): age less than 0

Rõ ràng từ tập kết quả trên rằng nếu chúng tôi cố gắng chèn tuổi nhỏ hơn 0 thì nó sẽ gây ra lỗi khi sử dụng câu lệnh SIGNAL.