Kích hoạt là một đối tượng được xác định danh sách trong cơ sở dữ liệu cơ sở dữ liệu và được gắn chặt với một sự kiện xảy ra trên một bảng nào đó [điều kiện này có nghĩa là nó sẽ tự động thực hiện khi một sự kiện xảy ra trên một bảng]. This eventbao gồm. CHÈN, CẬP NHẬT hoặc XÓA một bảng. là một đối tượng được xác định danh sách trong cơ sở dữ liệu và được gắn chặt với một sự kiện xảy ra trên một bảng điều kiện nào đó [điều này có nghĩa là nó sẽ được tự động thực hiện khi một sự kiện xảy ra trên một bảng]. This eventbao gồm. CHÈN, CẬP NHẬT hoặc XÓA một bảng
Trình kích hoạt được đưa vào MySQL từ phiên bản 5. 0. 2 được đưa vào MySQL từ phiên bản 5. 0. 2
II. In sao lại sử dụng Trigger?
Trình kích hoạt được thực hiện tự động khi xuất hiện một hành động thay đổi trong bảng, nên người ta có thể áp dụng trình kích hoạt để tạo ra các công việc tự động thay cho việc phải làm thủ công bằng tay như. kiểm tra dữ liệu, đồng bộ hóa dữ liệu, đảm bảo các mối quan hệ giữa các bảng. được thực hiện tự động khi xuất hiện một hành động thay đổi trong bảng, nên người ta có thể ứng dụng kích hoạt để tạo ra các công việc tự động thay vì việc phải làm thủ công bằng tay như. kiểm tra dữ liệu, đồng bộ hóa dữ liệu, đảm bảo các mối quan hệ giữa các bảng
III. Ưu nhược điểm của trigger
- điểm ưu tiên
– Dễ dàng kiểm tra tính toàn vẹn của csdl. – Trình kích hoạt có thể bắt lỗi nghiệp vụ logic nghiệp vụ ở mức csdl
– Có thể sử dụng trình kích hoạt theo một cách khác để thay thế việc thực hiện các công việc đã hẹn theo giờ theo lịch
– Kích hoạt rất hiệu quả khi được sử dụng để kiểm tra những thay đổi của dữ liệu trong bảng
- Nhược điểm
– Kích hoạt chỉ là một phần mở rộng của hợp lệ kiểm tra tính toán của dữ liệu chứ không phải thay thế được hoàn thành toàn bộ công việc này
– Kích hoạt dừng hoạt động trong csdl, không hiển thị ở tầng giao diện. Do đó, khó chỉ ra điều gì xảy ra ở tầng csdl
– Kích hoạt thực hiện cập nhật lên bảng dữ liệu vì thế nó làm tăng lượng công việc lên csdl và làm cho hệ thống chạy chậm
IV. Activity of trigger in MySQL
Khi bạn tạo một trình kích hoạt trong MySQL, thì định nghĩa của nó được lưu trong tệp có phần mở rộng là '. TRG’ at directory of csdl
/data_folder/database_name/table_name.trg
Chúng ta có thể mở và chỉnh sửa
Một số giới hạn cần lưu ý khi sử dụng trình kích hoạt
Unable to call a normal life from trigger
Không thể tạo trình kích hoạt theo bảng ảo hoặc bảng tạm thời
Không thể sử dụng giao tác [giao dịch] trong trình kích hoạt
Kích hoạt không cho phép sử dụng lệnh RETURN
Sử dụng trình kích hoạt sẽ ảnh hưởng đến bộ nhớ tạm thời cho lệnh truy vấn
Tất cả các trình kích hoạt của csdl đều không được trùng tên
V. Create trigger
cú pháp
CREATE TRIGGER trigger_name trigger_time trigger_event
ON table_name
FOR EACH ROW
BEGIN
...
END
Giải thích
CREATE TRIGGER used to make trigger
Trigger_name là tên của trình kích hoạt được đặt theo trình tự [thời gian kích hoạt][tên bảng][sự kiện kích hoạt] là tên của trình kích hoạt được đặt theo trình tự [thời gian kích hoạt][tên bảng][sự kiện kích hoạt]
ví dụ. before_products_update
Trigger_time is start trigger time. is time trigger
TRƯỚC. khi bạn muốn xử lý trước khi thực hiện thay đổi trên bảng dữ liệu. khi bạn muốn xử lý trước khi thực hiện thay đổi trên bảng dữ liệu
SAU ĐÓ. change on data table before then new handle after. change on data table before then new handle after
Trigger_event is the tracker of the event. Nó có 3 lựa chọn CHÈN, CẬP NHẬT hoặc XÓA. Mỗi trigger chỉ theo dõi được một sự kiện duy nhất. is the tracker of the event. Nó có 3 lựa chọn CHÈN, CẬP NHẬT hoặc XÓA. Mỗi trigger chỉ theo dõi được một sự kiện duy nhất
Mỗi trình kích hoạt phải gắn liền với một bảng dữ liệu chỉ được đưa ra sau từ khóa BẬT
Phần thân của trình kích hoạt nằm trong khối lệnh BEGIN...END
Từ khóa OLD chỉ đến dòng dữ liệu đang tồn tại trước khi thực hiện thao tác chỉnh sửa. Từ khóa NEW chỉ đến dòng dữ liệu mới xuất hiện sau khi thực hiện thao tác chỉnh sửa
Chúng ta đã có các bảng sản phẩm trong csdl với cấu trúc như sau
-- ----------------------------
-- Table structure for products
-- ----------------------------
DROP TABLE IF EXISTS `products`;
CREATE TABLE `products` [
`id` int[11] NOT NULL AUTO_INCREMENT,
`title` varchar[255] COLLATE utf8_unicode_ci DEFAULT NULL,
`content` text COLLATE utf8_unicode_ci,
PRIMARY KEY [`id`]
] ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
-- ----------------------------
-- Records of products
-- ----------------------------
INSERT INTO `products` VALUES ['1', 'Apple', 'This is Apple'];
INSERT INTO `products` VALUES ['2', 'Samsung', 'This is Samsung'];
INSERT INTO `products` VALUES ['3', 'Nokia', 'This is Nokia'];
INSERT INTO `products` VALUES ['4', 'Microsoft', 'This is Microsoft'];
Viết kích hoạt, bất cứ khi nào xảy ra việc thay đổi dữ liệu trên bảng sản phẩm thì những thay đổi đó sẽ được ghi nhận và được lưu vào một bảng khác. Chúng ta tạo một bảng mới thực hiện chức năng này với cấu trúc như sau
DROP TABLE IF EXISTS `products_tmp`;
CREATE TABLE `products_tmp` [
`id` int[11] NOT NULL AUTO_INCREMENT,
`title` varchar[255] COLLATE utf8_unicode_ci DEFAULT NULL,
`content` text COLLATE utf8_unicode_ci,
`date` varchar[255] COLLATE utf8_unicode_ci DEFAULT NULL,
PRIMARY KEY [`id`]
] ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
To theo dõi nhưng thay đổiTôi chỉnh sửa các sản phẩm mà chúng ta tạo ra để kích hoạt theo dõi lệnh cập nhật trên trường dữ liệu này
DROP TRIGGER IF EXISTS before_product_update;
DELIMITER $$
CREATE TRIGGER before_product_update
BEFORE UPDATE ON products
FOR EACH ROW
BEGIN
INSERT INTO products_tmp
SET
title = OLD.title,
content = OLD.content,
date = NOW[];
END$$
DELIMITER ;
Bây giờ chúng ta kiểm tra thử câu lệnh cập nhật
UPDATE products set title = 'Apple change' WHERE id = '1';
sau đó ta thấy bảng sản phẩm đã thay đổi
SELECT * FROM `products`;
and table products_tmp đã lưu mục đã chỉnh sửa
SELECT * FROM `products_tmp`;
oke, vậy là trigger đã tạo thành công
VI. Trình kích hoạt quản lý trong MySQL
Quản lý các trình kích hoạt được tạo ra trong csdl là một thao tác cần nắm giữ. MySQL cho phép chúng ta xem danh sách các trình kích hoạt có trong csdl bằng các câu lệnh sau
- To delete trigger ta use the command after
- Hiển thị tất cả các trình kích hoạt
SHOW TRIGGERS;
KL. Thao tác quản lý dữ liệu có dung lượng lớn không hề đơn giản, không phải ai cũng sử dụng 1 cách thuần thục. Rất có thể sẽ có người xóa nhầm trong cơ sở dữ liệu, sẽ gây ra ảnh hưởng không nhỏ, nếu dữ liệu đó quan trọng. Use trigger could get back the data has been delete. Có thể theo dõi ai đó xóa, sửa, xóa ngày nào , giờ nào. Tuy nhiên, chúng ta cũng cần lưu ý, tạo nhiều Trigger thực hiện các cập nhật lên bảng dữ liệu, nó làm tăng lượng công việc lên csdl và làm cho hệ thống chạy chậm