Cách tạo trình kích hoạt trong MySQL
Tìm hiểu về Trình kích hoạt MySQL trong hướng dẫn thực hành này với các ví dụ. Giải thích cách sử dụng Trình kích hoạt CREATE, INSERT, DELETE và UPDATE trong MySQL Show
MySQL TRIGGER là một đối tượng được liên kết với một bảng trong MySQL. Đó là một hành động được thực thi để phản hồi lại một sự kiện đã xác định trên bàn Ví dụ: Bạn có thể chỉ định trình kích hoạt để được thực thi khi thao tác CHÈN, CẬP NHẬT hoặc XÓA xảy ra trong một bảng. Cần lưu ý rằng yêu cầu chính để thực thi trình kích hoạt là SUPERUSER hoặc đặc quyền gốc từ tài khoản nơi trình kích hoạt đang được thực thi => Kiểm tra TẤT CẢ Hướng dẫn về MySQL tại đây Bạn sẽ học được gì
Trình kích hoạt MySQLNói chung, có 2 loại Trigger
Mysql 8. 0 chỉ hỗ trợ các trình kích hoạt cấp hàng được gọi cho mỗi lần chèn/cập nhật/xóa hàng cú phápHãy xem cú pháp để xác định hoặc tạo TRIGGER trong MySQL CREATE TRIGGER trigger_name trigger_time trigger_event ON table_name FOR EACH ROW [trigger_order] body trigger_name. Tên duy nhất cho đối tượng kích hoạt trong bảng thời gian kích hoạt. Các giá trị được phép là TRƯỚC & SAU – Trường này cho biết liệu trình kích hoạt sẽ được kích hoạt TRƯỚC hay SAU sự kiện trigger_event. Là sự kiện hoặc hành động thực tế sẽ dẫn đến việc gọi trình kích hoạt Các giá trị được phép cho trường này là
tên_bảng. Tên của bảng MySQL mà trình kích hoạt đang được xác định trigger_order. Đây là trường tùy chọn và được sử dụng để xác định thứ tự thực hiện trình kích hoạt. Điều này thường được sử dụng khi có nhiều trình kích hoạt được liên kết với cùng một sự kiện – Trong trường hợp đó, chúng ta có thể xác định thứ tự thực hiện Nó sử dụng cú pháp bên dưới. Ghi chú. Nếu trigger_body chứa nhiều câu lệnh, chúng ta có thể sử dụng cú pháp tương tự như cách chúng ta sử dụng nó để tạo THỦ TỤC LƯU TRỮ. Trong trường hợp đó, phần thân trình kích hoạt sẽ được đặt giữa các lệnh BEGIN và END và toàn bộ định nghĩa Trình kích hoạt sẽ nằm giữa các lệnh DELIMITER để có nhiều câu lệnh được chỉ định với các khối BEGIN…END DELIMITER $$ // Trigger Syntax BEGIN -- Statements END $$ DELIMITER ; Các ứng dụng của việc sử dụng MySQL TriggersCó rất nhiều ứng dụng thực tế của trình kích hoạt MySQL
Dữ liệu thử nghiệmTên bảng – item_inventory CREATE TABLE item_inventory (id SMALLINT(5) NOT NULL AUTO_INCREMENT PRIMARY KEY, name VARCHAR(30), price DECIMAL(5,2), quantity INTEGER); TẠO KÍCH HOẠT trong MySQLHãy xem một số ví dụ về việc sử dụng MySQL CREATE trigger MySQL CHÈN KÍCH HOẠTChúng ta có thể tạo trình kích hoạt cho hàng INSERTS trong một bảng hiện có. Có thể có 2 loại trình kích hoạt như vậy là SAU KHI CHÈN và TRƯỚC KHI CHÈN SAU KHI CHÈN KÍCH HOẠTChúng tôi sẽ tạo trình kích hoạt SAU KHI CHÈN trên bảng được đề cập trong dữ liệu thử nghiệm – item_inventory Trước tiên hãy tạo một bảng kiểm tra hàng tồn kho CREATE TABLE item_inventory_audit (id SMALLINT(5) NOT NULL AUTO_INCREMENT PRIMARY KEY, item_id VARCHAR(30), price DECIMAL(5,2), created_on DATETIME(6), quantity INTEGER); Chúng tôi sẽ tạo một TRIGGER để thêm một mục trong bảng item_inventory_audit sau mỗi INSERT trong bảng item_inventory CREATE TRIGGER trigger_tutorial.trigger_item_insert_audit AFTER INSERT ON trigger_tutorial.item_inventory FOR EACH ROW INSERT INTO trigger_tutorial.item_inventory_audit(item_id,price,created_on,quantity) VALUES(new.item_id, new.price, now(), new.quantity); Trong định nghĩa TRIGGER ở trên
Chúng tôi cũng có thể kiểm tra xem trình kích hoạt đã được tạo thành công hay chưa bằng cách điều hướng đến thư mục kích hoạt trong bảng tương ứng trên bất kỳ máy khách MySQL GUI nào như MySQL Workbench Hãy thử chạy cái này Chúng tôi sẽ CHÈN một bản ghi trong bảng item_inventory INSERT INTO trigger_tutorial.item_inventory(name, price, quantity) VALUES("Henko Washing Powder",150.50,100); Bây giờ chúng ta có thể kiểm tra xem bản ghi tương ứng trong bảng item_inventory_audit đã được tạo hay chưa SELECT * FROM trigger_tutorial.item_inventory_audit; TRƯỚC KHI CHÈN KÍCH HOẠTKích hoạt Before INSERT sẽ được gọi TRƯỚC mỗi hàng INSERT trên bảng đích Cú pháp tạo Trigger vẫn giống như chúng ta đã thấy trong phần trước TRƯỚC KHI CHÈN có thể được sử dụng khi bạn muốn cập nhật các giá trị được chèn vào một số giá trị khác hoặc giá trị mặc định, v.v. DELIMITER $$ CREATE TRIGGER trigger_tutorial.trigger_item_before_insert BEFORE INSERT ON trigger_tutorial.item_inventory FOR EACH ROW BEGIN IF new.price > 100 THEN SET new.price = 1.02 * new.price; END IF; END $$ DELIMITER ; Giả sử chúng ta muốn giá trong bảng kiểm toán cao hơn 2% so với dữ liệu giá thực tế được nhập Ở đây, chúng tôi đã tạo trình kích hoạt TRƯỚC KHI CHÈN, điều này sẽ thay đổi giá của hàng mới được thêm vào 1. 02 lần giá gốc ________số 8KÍCH HOẠT CẬP NHẬT MySQLChúng tôi có thể tạo trình kích hoạt cho hàng CẬP NHẬT của một bảng hiện có. Tương tự như INSERT, đối với UPDATE cũng vậy, chúng ta có thể có 2 loại trigger i. e. TRƯỚC CẬP NHẬT và SAU CẬP NHẬT. Hãy xem ví dụ cho cả hai trường hợp như vậy Trong trình kích hoạt CẬP NHẬT – chúng tôi có thể truy xuất cả giá trị MỚI và CŨ cho mục đang được cập nhật bằng từ khóa mới và cũ tương ứng Hãy tạo Trình kích hoạt TRƯỚC CẬP NHẬT để đặt số lượng được cập nhật trong hàng MỚI thành chênh lệch giữa giá trị CŨ và MỚI. Ví dụ, nếu ai đó đang cập nhật cột số lượng trong bảng hiện có, thì
DELIMITER $$ CREATE TRIGGER trigger_tutorial.trigger_item_before_update BEFORE UPDATE ON trigger_tutorial.item_inventory FOR EACH ROW BEGIN IF old.quantity > new.quantity THEN SET new.quantity = old.quantity - new.quantity; ELSE SET new.quantity = 0; END IF; END $$ DELIMITER ; Chúng ta cũng hãy tạo một Trình kích hoạt SAU CẬP NHẬT sẽ CHÈN một hàng mới trong bảng kiểm toán với giá trị cột số lượng mới được tính trong BỘ KÍCH HOẠT TRƯỚC CẬP NHẬT như minh họa ở trên DELIMITER $$ // Trigger Syntax BEGIN -- Statements END $$ DELIMITER ;0 Bây giờ chúng ta hãy hiểu điều này với sự trợ giúp của một ví dụ Giả sử chúng ta đã thực hiện INSERT ban đầu trong bảng item_inventory bằng truy vấn bên dưới DELIMITER $$ // Trigger Syntax BEGIN -- Statements END $$ DELIMITER ;6 Điều này sẽ kích hoạt Kích hoạt TRƯỚC CHÈN và SAU KHI CHÈN tương ứng Bây giờ, hãy chạy CẬP NHẬT cho Mục này (có ID mục – 2) DELIMITER $$ // Trigger Syntax BEGIN -- Statements END $$ DELIMITER ;7 Bây giờ trình tự thực hiện kích hoạt cho CẬP NHẬT sẽ là => BÁO CÁO CẬP NHẬT => TRƯỚC KHI CẬP NHẬT KÍCH HOẠT => SAU KHI CẬP NHẬT KÍCH HOẠT Logic trong TRƯỚC CẬP NHẬT KÍCH HOẠT – sẽ cập nhật số lượng hàng mới thành chênh lệch giữa giá trị mới và giá trị gốc Vì chúng tôi đang cập nhật số lượng thành 20 và giá trị ban đầu là 60, nên giá trị thực sẽ được chèn vào bảng sẽ là 40 Hãy thực hiện CHỌN trên bảng inventory_audit để xác minh kết quả DELIMITER $$ // Trigger Syntax BEGIN -- Statements END $$ DELIMITER ;1 Hàng đầu tiên bạn nhìn thấy ở trên được thêm bởi INSERT Trigger Hàng thứ hai được thêm vào như một phần của CẬP NHẬT
CÔNG CỤ XÓA MySQLĐể xóa hoặc bỏ MySQL TRIGGER, chúng ta có thể sử dụng lệnh DROP TRIGGER cú pháp DELIMITER $$ // Trigger Syntax BEGIN -- Statements END $$ DELIMITER ;8 Hãy xem một lệnh ví dụ Giả sử chúng tôi muốn xóa trình kích hoạt TRƯỚC KHI CHÈN mà chúng tôi đã tạo trong các phần trước. Trình kích hoạt được đặt tên là trigger_tutorial. trigger_item_b Before_insert Hãy sử dụng lệnh DROP để xóa cái này DELIMITER $$ // Trigger Syntax BEGIN -- Statements END $$ DELIMITER ;2 Sau khi trình kích hoạt bị xóa, mọi hành động được liên kết với trình kích hoạt sẽ bị vô hiệu và không có sự kiện nào như vậy xảy ra Liệt kê tất cả các trình kích hoạt được liên kết với bảngĐể liệt kê tất cả các trình kích hoạt được liên kết với lược đồ hoặc cơ sở dữ liệu, bạn có thể sử dụng lệnh SHOW TRIGGER Ví dụ. Nếu chúng ta muốn liệt kê tất cả các trình kích hoạt trong lược đồ trigger_tutorial, thì chúng ta có thể sử dụng lệnh bên dưới. DELIMITER $$ // Trigger Syntax BEGIN -- Statements END $$ DELIMITER ;3 //Đầu ra Bạn có thể thấy nhiều chi tiết khác nhau liên quan đến các trình kích hoạt khác nhau có sẵn trong lược đồ Một vài chi tiết cột như vậy được hiển thị bên dưới Tạo Trigger bằng MySQL GUI Client – MySQL WorkbenchTương tự như việc tạo bằng sự kiện CREATE TRIGGER, các trình kích hoạt cũng có thể được tạo bằng cách sử dụng MySQL GUI Clients như MySQL Workbench Hãy xem các bước để tạo Trình kích hoạt TRƯỚC KHI CHÈN bằng cách sử dụng MySQL Workbench #1) Nhấp chuột phải vào tên bảng cần tạo trình kích hoạt #2) Chọn tùy chọn “Alter Table” #3) Tạo “Tab kích hoạt” #4) Nhấp vào dấu ‘+’ bên cạnh phần TRƯỚC CHÈN để tạo trình kích hoạt #5) Ở bên phải, cập nhật/chỉnh sửa định nghĩa của trình kích hoạt. Chúng tôi sẽ thêm một câu lệnh IF để đặt giá = 1. 02 * giá cho giá > 100 DELIMITER $$ // Trigger Syntax BEGIN -- Statements END $$ DELIMITER ;4 #6) Nhấp vào “Áp dụng” để Lưu Trình kích hoạt #7) Trình kích hoạt hiện đã được tạo. Để xác minh, bạn có thể chạy lệnh SHOW TRIGGERS và xác thực xem trình kích hoạt mới tạo có hiển thị không DELIMITER $$ // Trigger Syntax BEGIN -- Statements END $$ DELIMITER ;3 Tương tự như TRƯỚC CHÈN, chúng ta có thể thêm/xóa các loại trigger khác như SAU KHI CHÈN, TRƯỚC/SAU CẬP NHẬT, TRƯỚC/SAU KHI DELETE thông qua MySQL Workbench GUI Client cũng như Xử lý lỗi trong quá trình thực hiện kích hoạtĐiều quan trọng là phải hiểu cách MySQL xử lý các lỗi xảy ra trong quá trình thực thi trình kích hoạt
Ưu điểm của việc sử dụng Trigger
Các câu hỏi thường gặpQ #1) Trình kích hoạt trong MySQL là gì? Câu trả lời. Nói một cách đơn giản, Trình kích hoạt trong MySQL là một loại hành động để phản hồi lại bất kỳ sự kiện nào được xác định Ví dụ: Giả sử chúng ta muốn thực hiện một số hành động (dưới dạng thực thi một số câu lệnh/chèn dữ liệu vào một bảng khác) khi CHÈN hoặc CẬP NHẬT một hàng trong một số bảng khác, . Q #2) Trình kích hoạt được triển khai trong MySQL như thế nào? câu trả lời. Kích hoạt được đặt tên đối tượng trong MySQL DATABASE i. e. Trình kích hoạt được liên kết với một bảng trong cơ sở dữ liệu MySQL Các trình kích hoạt có thể được tạo bằng lệnh CREATE TRIGGER và có thể là một trong 2 loại
Câu hỏi 3) Có thể có nhiều Trình kích hoạt được liên kết với cùng một sự kiện không? Trả lời. Có, hoàn toàn ổn nếu có nhiều trình kích hoạt được liên kết với cùng một sự kiện. Ví dụ: chúng ta có thể xác định nhiều trình kích hoạt để thực thi khi một hàng được CHÈN vào một bảng. Thứ tự thực thi trigger mặc định theo thứ tự tạo trigger. Trình tự này cũng có thể được thay đổi bằng cách sử dụng trường trigger_order trong khi tạo trình kích hoạt Q #4) Có thể cập nhật trình kích hoạt hiện tại không? Câu trả lời. Trong MySQL, không có câu lệnh nào để cập nhật hoặc thay đổi trình kích hoạt hiện có. Nếu sau khi tạo trigger, bạn cần thay đổi trigger. Bạn có thể DROP trình kích hoạt hiện có bằng cách sử dụng lệnh DROP TRIGGER và tạo một trình kích hoạt mới có cùng tên Sự kết luậnTrong hướng dẫn này, chúng ta đã tìm hiểu về khái niệm sử dụng TRIGGERS trong MySQL. Trình kích hoạt cho phép người dùng xác định một hành động tùy chỉnh để phản hồi một sự kiện được xác định trước như CHÈN hoặc CẬP NHẬT một hàng trong bảng khác, v.v. Kích hoạt rất hữu ích trong các trường hợp sử dụng khác nhau, chẳng hạn như
Trình kích hoạt cũng hỗ trợ phần lớn việc sử dụng lại mã và tối ưu hóa hiệu suất bằng cách giảm các cuộc gọi mạng qua lại cho các bản cập nhật riêng lẻ Trình kích hoạt trong MySQL với ví dụ là gì?Trình kích hoạt MySQL là đối tượng cơ sở dữ liệu được liên kết với bảng . Nó sẽ được kích hoạt khi một hành động xác định được thực thi cho bảng. Trình kích hoạt có thể được thực thi khi bạn chạy một trong các câu lệnh MySQL sau trên bảng. CHÈN, CẬP NHẬT và XÓA và nó có thể được gọi trước hoặc sau sự kiện.
Cú pháp chính xác để tạo trình kích hoạt trong MySQL là gì?Cú pháp kích hoạt cơ bản là. TẠO KÍCH HOẠT `event_name` TRƯỚC/SAU KHI CHÈN/CẬP NHẬT/XÓA TRÊN `cơ sở dữ liệu`. `bảng` CHO MỖI HÀNG BẮT ĐẦU -- thân trình kích hoạt -- mã này được áp dụng cho mọi -- hàng được chèn/cập nhật/xóa KẾT THÚC;
Trình kích hoạt trong MySQL có nghĩa là gì?Trình kích hoạt là đối tượng cơ sở dữ liệu có tên được liên kết với bảng và kích hoạt khi một sự kiện cụ thể xảy ra đối với bảng . Một số cách sử dụng trình kích hoạt là để thực hiện kiểm tra các giá trị được chèn vào bảng hoặc để thực hiện các phép tính trên các giá trị liên quan đến một bản cập nhật.
Lệnh nào tạo trình kích hoạt?Sử dụng lệnh CREATE TRIGGER để tạo trình kích hoạt cơ sở dữ liệu kích hoạt khi xảy ra sửa đổi hoặc cố gắng sửa đổi bảng ObjectServer (hoặc khi sửa đổi . |