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

Các từ khóa CŨ và MỚI cho phép chúng tôi truy cập các cột trong hàng bị ảnh hưởng bởi trình kích hoạt như thế nào?

Như chúng ta biết rằng trong định nghĩa trình kích hoạt, chúng ta có thể đề cập đến các cột của hàng đang được chèn, cập nhật hoặc xóa. Sau đây là các cách từ khóa CŨ và MỚI cho phép chúng tôi truy cập các cột -

  • Chúng ta phải thêm tiền tố vào tên cột với một định nghĩa là CŨ để tham chiếu đến một giá trị từ hàng ban đầu.

  • Chúng ta phải đặt tiền tố tên cột với một định nghĩa là MỚI để tham chiếu đến một giá trị trong hàng mới.

Bây giờ, việc sử dụng CŨ và MỚI phải được thực hiện một cách thích hợp vì sự kiện kích hoạt

Xác định chúng được phép -

  • Trong một kích hoạt CHÈN, NEW.column_name cho biết một giá trị cột sẽ được chèn vào một hàng mới. Ở đây không cho phép sử dụng OLD.

  • Trong trình kích hoạt XÓA, OLD.column_name cho biết giá trị của một cột trong một hàng sẽ bị xóa. Ở đây MỚI không được phép.

  • Trong trình kích hoạt CẬP NHẬT, OLD.column_name và NEW.column_name tham chiếu đến giá trị của cột trong một hàng trước và sau khi hàng được cập nhật tương ứng.

Nói cách khác, chúng ta có thể nói rằng CŨ phải được sử dụng theo kiểu chỉ đọc và MỚI có thể được sử dụng để đọc hoặc thay đổi giá trị cột.

Sử dụng từ khóa CŨ trong trình kích hoạt

Sau ví dụ về trình kích hoạt DELETE đang hiển thị việc sử dụng OLD -

mysql> CREATE TRIGGER studentinfo_after_delete
   -> AFTER DELETE
   -> ON student_info
   -> FOR EACH ROW FOLLOWS
   -> BEGIN
   -> DECLARE vuser varchar(30);
   -> SELECT USER() into vuser;
   -> INSERT INTO student_info_deleted(id,deleted_date,deleted_by) VALUES(OLD.id,SYSDATE(),vuser);
   -> END; //
Query OK, 0 rows affected (0.25 sec)

Sử dụng từ khóa MỚI trong trình kích hoạt

Sau ví dụ về kích hoạt INSERT đang hiển thị việc sử dụng MỚI -

mysql> Create Trigger before_inser_studentage BEFORE INSERT ON
student_age FOR EACH ROW
BEGIN
IF NEW.age < 0 THEN SET NEW.age = 0;
END IF;
END //
Query OK, 0 rows affected (0.30 sec)