Trình kích hoạt MySQL là một đối tượng cơ sở dữ liệu được liên kết với một 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
Bạn có thể tìm thấy lời giải thích chi tiết về chức năng và cú pháp kích hoạt trong bài viết này
Yêu cầu chính để chạy các Trình kích hoạt MySQL như vậy là có các đặc quyền SIÊU NGƯỜI DÙNG MySQL
Không thể cấp đặc quyền SUPERUSER MySQL cho người dùng được lưu trữ trên máy chủ SiteGround do thiết lập máy chủ
Các cột trong MySQL áp dụng một số giới hạn giá trị nhỏ. Ví dụ: đặt kiểu dữ liệu cột là tiny int và không null yêu cầu đầu vào giá trị số nhỏ. Tuy nhiên, cần có nhiều hạn chế hơn để duy trì tính toàn vẹn của dữ liệu
Hướng dẫn này chỉ cho bạn cách sử dụng trình kích hoạt MySQL và cung cấp các ví dụ cho từng loại trình kích hoạt
điều kiện tiên quyết
Trình kích hoạt trong MySQL là gì?
Trình kích hoạt là một đối tượng MySQL được đặt tên kích hoạt khi một sự kiện xảy ra trong bảng. Kích hoạt là một loại thủ tục được lưu trữ cụ thể được liên kết với một bảng cụ thể
Trình kích hoạt cho phép truy cập vào các giá trị từ bảng nhằm mục đích so sánh bằng cách sử dụng
employee_bi
3 và employee_bi
4. Tính khả dụng của các công cụ sửa đổi tùy thuộc vào sự kiện kích hoạt mà bạn sử dụngSự kiện kích hoạtOLDNEWINSERTKhôngCóCẬP NHẬTCóCóXÓACóKhôngKiểm tra hoặc sửa đổi một giá trị khi cố gắng chèn dữ liệu làm cho công cụ sửa đổi
employee_bi
5 khả dụng. Điều này là do một bảng được cập nhật với nội dung mới. Ngược lại, giá trị employee_bi
6 không tồn tại cho câu lệnh chèn vì không có thông tin nào tồn tại ở vị trí của nó trước đóKhi cập nhật một hàng của bảng, cả hai công cụ sửa đổi đều khả dụng. Có
employee_bi
6data mà chúng tôi muốn cập nhật lên employee_bi
5dataCuối cùng, khi xóa một hàng dữ liệu, công cụ sửa đổi
employee_bi
6 sẽ truy cập giá trị đã xóa. employee_bi
5không tồn tại vì không có gì thay thế giá trị cũ khi xóaVí dụ kích hoạt MySQL
Như một ví dụ về trình kích hoạt được áp dụng, việc chèn các giá trị mới vào bảng person sẽ mang lại kết quả khác với đầu vào ban đầu
Lưu ý tên được chèn ban đầu là chữ thường. Khi chọn bảng, chữ cái đầu tiên hiển thị là viết hoa. Mặc dù không có dấu hiệu nào khác với câu lệnh chèn thông thường, trình kích hoạt được kích hoạt trước câu lệnh chèn để viết hoa chữ cái đầu tiên của tên
Sử dụng trình kích hoạt MySQL
Mỗi trình kích hoạt được liên kết với một bảng có một tên và chức năng duy nhất dựa trên hai yếu tố
1. Thời gian.
DROP TRIGGER ;
1 hoặc DROP TRIGGER ;
2 một sự kiện hàng cụ thể2. Biến cố.
DROP TRIGGER ;
3, DROP TRIGGER ;
4 hoặc DROP TRIGGER ;
5Kích hoạt MySQL kích hoạt tùy thuộc vào thời gian kích hoạt và sự kiện trong tổng số sáu kết hợp kích hoạt duy nhất. Các câu lệnh trước giúp kiểm tra dữ liệu và thực hiện các thay đổi trước khi thực hiện các cam kết, trong khi các câu lệnh sau cam kết dữ liệu trước rồi mới thực hiện các câu lệnh
Việc thực hiện một tập hợp các hành động diễn ra tự động, ảnh hưởng đến tất cả các hàng được chèn, xóa hoặc cập nhật trong câu lệnh
Tạo trình kích hoạt
Sử dụng cú pháp câu lệnh
DROP TRIGGER ;
6 để tạo trình kích hoạt mớiemployee_bi
4DROP TRIGGER ;
7Ví dụ: nếu trình kích hoạt kích hoạt trước khi chèn vào bảng có tên nhân viên, quy ước tốt nhất là gọi trình kích hoạt
employee_bi
6Ngoài ra, một thực tế phổ biến là sử dụng định dạng sau
employee_bi
7
Tên kích hoạt chèn trước cho nhân viên bảng trông như thế này
employee_bi
Trình kích hoạt thực thi tại một thời điểm cụ thể của một sự kiện trên bảng được xác định bởi
cho mỗi hàng bị ảnh hưởng bởi chức năngXóa Trình kích hoạt
Để xóa trình kích hoạt, hãy sử dụng câu lệnh
DROP TRIGGER ;
9________số 8Ngoài ra, sử dụng
employee_bi
2Thông báo lỗi không hiển thị vì không có trình kích hoạt, vì vậy không có cảnh báo nào được in
Tạo cơ sở dữ liệu mẫu
Tạo cơ sở dữ liệu cho mã ví dụ kích hoạt với cấu trúc sau
1. Tạo một bảng được gọi là người có tên và tuổi cho các cột
employee_bi
3Chèn dữ liệu mẫu vào bảng
employee_bi
4Chọn bảng để xem kết quả
employee_bi
52. Tạo một bảng có tên là average_age với một cột có tên là average
employee_bi
6Chèn giá trị tuổi trung bình vào bảng
employee_bi
60Chọn bảng để xem kết quả
employee_bi
613. Tạo một bảng có tên person_archive với các cột tên, tuổi và thời gian
employee_bi
62Tạo Trình kích hoạt TRƯỚC KHI CHÈN
Để tạo trình kích hoạt
employee_bi
20, hãy sử dụngemployee_bi
63
Trình kích hoạt
employee_bi
20 cho phép kiểm soát sửa đổi dữ liệu trước khi đưa vào bảng cơ sở dữ liệu. Viết hoa tên cho nhất quán, kiểm tra độ dài của đầu vào hoặc phát hiện đầu vào bị lỗi bằng trình kích hoạt employee_bi
20 cung cấp thêm các giới hạn giá trị trước khi nhập dữ liệu mớiTRƯỚC KHI CHÈN Ví dụ kích hoạt
Tạo trình kích hoạt
employee_bi
20 để kiểm tra giá trị tuổi trước khi chèn dữ liệu vào bảng ngườiemployee_bi
64Chèn dữ liệu sẽ kích hoạt trình kích hoạt và kiểm tra giá trị của tuổi trước khi xác nhận thông tin
employee_bi
65Bảng điều khiển hiển thị thông báo lỗi mô tả. Dữ liệu không chèn vào bảng do kiểm tra trình kích hoạt không thành công
Tạo Trình kích hoạt SAU KHI CHÈN
Tạo trình kích hoạt
employee_bi
25 vớiemployee_bi
66
Trình kích hoạt
employee_bi
25 hữu ích khi hàng đã nhập tạo ra một giá trị cần thiết để cập nhật một bảng khácSAU KHI CHÈN Ví dụ kích hoạt
Chèn một hàng mới vào bảng người không tự động cập nhật giá trị trung bình trong bảng average_age. Tạo trình kích hoạt
employee_bi
25 trên bảng người để cập nhật bảng average_age sau khi chènemployee_bi
67Chèn một hàng mới vào bảng người sẽ kích hoạt trình kích hoạt
employee_bi
68Dữ liệu được chuyển thành công vào bảng người và cập nhật bảng average_age với giá trị trung bình chính xác
Tạo trình kích hoạt
employee_bi
29 vớiemployee_bi
69
Trình kích hoạt ________ 229 đi cùng với trình kích hoạt ________ 220. Nếu có bất kỳ giới hạn nào tồn tại trước khi chèn dữ liệu, thì các giới hạn đó cũng phải có trước khi cập nhật
TRƯỚC KHI CẬP NHẬT Ví dụ về kích hoạt
Nếu có giới hạn độ tuổi cho bảng người trước khi chèn dữ liệu, giới hạn độ tuổi cũng phải tồn tại trước khi cập nhật thông tin. Không có trình kích hoạt
employee_bi
29, trình kích hoạt kiểm tra độ tuổi rất dễ tránh. Không có gì hạn chế chỉnh sửa đối với một giá trị bị lỗiThêm trình kích hoạt
employee_bi
29 vào bảng người có cùng phần thân với trình kích hoạt employee_bi
20employee_bi
70Cập nhật một giá trị hiện có sẽ kích hoạt kiểm tra trình kích hoạt
employee_bi
71Cập nhật tuổi thành giá trị nhỏ hơn 18 sẽ hiển thị thông báo lỗi và thông tin không cập nhật
Sử dụng khối mã sau để tạo trình kích hoạt
employee_bi
36employee_bi
72
Trình kích hoạt
employee_bi
36 giúp theo dõi các thay đổi đã cam kết đối với dữ liệu. Thông thường, mọi thay đổi sau khi chèn thông tin cũng xảy ra sau khi cập nhật dữ liệuSAU KHI CẬP NHẬT Ví dụ về kích hoạt
Bất kỳ cập nhật thành công nào đối với dữ liệu tuổi trong bảng, mọi người cũng nên cập nhật giá trị trung bình trung bình được tính trong bảng average_age
Tạo trình kích hoạt
employee_bi
36 để cập nhật bảng average_age sau khi cập nhật một hàng trong bảng ngườiemployee_bi
73Cập nhật dữ liệu hiện có thay đổi giá trị trong bảng người
employee_bi
74Cập nhật bảng person cũng cập nhật giá trị trung bình trong bảng average_age
Tạo Trình kích hoạt TRƯỚC KHI XÓA
Để tạo trình kích hoạt
employee_bi
40, hãy sử dụngemployee_bi
75
Trình kích hoạt
employee_bi
40 rất cần thiết vì lý do bảo mật. Nếu một bảng cha có bất kỳ bảng con nào được đính kèm, trình kích hoạt sẽ giúp chặn việc xóa và ngăn các bảng mồ côi. Trình kích hoạt cũng cho phép lưu trữ dữ liệu trước khi xóaTRƯỚC KHI XÓA Ví dụ kích hoạt
Lưu trữ dữ liệu đã xóa bằng cách tạo trình kích hoạt
employee_bi
40 trên bảng person và chèn các giá trị vào bảng person_archiveemployee_bi
76Xóa dữ liệu khỏi bảng person lưu trữ dữ liệu vào bảng person_archive trước khi xóa
employee_bi
77Việc chèn lại giá trị vào bảng người sẽ giữ nhật ký của dữ liệu đã xóa trong bảng người_archive
employee_bi
78Trình kích hoạt
employee_bi
40 rất hữu ích để ghi lại bất kỳ nỗ lực thay đổi bảng nàoTạo Trình kích hoạt SAU KHI XÓA
Tạo trình kích hoạt
employee_bi
45 vớiemployee_bi
79
Trình kích hoạt
employee_bi
45 duy trì cập nhật thông tin yêu cầu hàng dữ liệu biến mất trước khi thực hiện cập nhậtSAU KHI DELETE Ví dụ kích hoạt
Tạo trình kích hoạt
employee_bi
45 trên người trong bàn để cập nhật bảng average_age với thông tin mớiemployee_bi
0Xóa một bản ghi khỏi bảng, người đó cập nhật bảng average_age với mức trung bình mới
Không có trình kích hoạt
employee_bi
45, thông tin không tự động cập nhậtTạo nhiều trình kích hoạt
MySQL không hỗ trợ kích hoạt nhiều trình kích hoạt cùng một lúc. Tuy nhiên, có thể thêm nhiều hoạt động logic vào cùng một trình kích hoạt. Sử dụng các dấu phân cách
employee_bi
50 và employee_bi
51 để biểu thị phần kích hoạtemployee_bi
1
Đảm bảo thay đổi dấu phân cách mặc định trước khi tạo trình kích hoạt có nhiều thao tác
Hiển thị Trình kích hoạt
Liệt kê tất cả các trình kích hoạt trong cơ sở dữ liệu với
employee_bi
2Đầu ra hiển thị danh sách tất cả các trình kích hoạt, bao gồm tên và nội dung câu lệnh
Các thông tin khác cũng hiển thị, chẳng hạn như thời gian tạo và người dùng đã tạo trình kích hoạt
Sự kết luận
Trình kích hoạt MySQL cung cấp thêm xác thực và kiểm soát dữ liệu trước hoặc sau khi các sự kiện cụ thể xảy ra. Cho dù bạn đang cố gắng ngăn lỗi hoặc thêm các hạn chế để đảm bảo tính nhất quán, trình kích hoạt sẽ giúp kiểm soát việc nhập, cập nhật và xóa dữ liệu
Hãy nhớ rằng việc kiểm tra trình kích hoạt diễn ra theo hàng, điều này khiến hiệu suất bị chậm lại với các truy vấn lớn. Để biết thêm tài liệu về chủ đề này, hãy xem bài viết của chúng tôi về cách cải thiện hiệu suất MySQL bằng cách điều chỉnh