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_bi3 và employee_bi4. 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ụng
Sự 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_bi5 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_bi6 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_bi6data mà chúng tôi muốn cập nhật lên employee_bi5data
Cuối cùng, khi xóa một hàng dữ liệu, công cụ sửa đổi employee_bi6 sẽ truy cập giá trị đã xóa. employee_bi5không tồn tại vì không có gì thay thế giá trị cũ khi xóa
Ví 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 ;5
Kí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ới
employee_bi4DROP 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_bi6Ngoài ra, một thực tế phổ biến là sử dụng định dạng sau
employee_bi7Tên kích hoạt chèn trước cho nhân viên bảng trông như thế này
employee_biTrì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_bi2Thô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_bi3Chèn dữ liệu mẫu vào bảng
employee_bi4Chọn bảng để xem kết quả
employee_bi52. Tạo một bảng có tên là average_age với một cột có tên là average
employee_bi6Chèn giá trị tuổi trung bình vào bảng
employee_bi60Chọn bảng để xem kết quả
employee_bi613. 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_bi62Tạo Trình kích hoạt TRƯỚC KHI CHÈN
Để tạo trình kích hoạt employee_bi20, hãy sử dụng
employee_bi63Trình kích hoạt employee_bi20 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_bi20 cung cấp thêm các giới hạn giá trị trước khi nhập dữ liệu mới
TRƯỚC KHI CHÈN Ví dụ kích hoạt
Tạo trình kích hoạt employee_bi20 để kiểm tra giá trị tuổi trước khi chèn dữ liệu vào bảng người
employee_bi64Chè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_bi65Bả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_bi25 với
employee_bi66Trình kích hoạt employee_bi25 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ác
SAU 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_bi25 trên bảng người để cập nhật bảng average_age sau khi chèn
employee_bi67Chè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_bi68Dữ 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_bi29 với
employee_bi69Trình kích hoạt employee_bi29 đi cùng với trình kích hoạt employee_bi20. 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_bi29, 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ỗi
Thêm trình kích hoạt employee_bi29 vào bảng người có cùng phần thân với trình kích hoạt employee_bi20
employee_bi70Cậ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_bi71Cậ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_bi36
employee_bi72Trình kích hoạt employee_bi36 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ệu
SAU 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_bi36 để cập nhật bảng average_age sau khi cập nhật một hàng trong bảng người
employee_bi73Cập nhật dữ liệu hiện có thay đổi giá trị trong bảng người
employee_bi74Cậ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_bi40, hãy sử dụng
employee_bi75Trình kích hoạt employee_bi40 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óa
TRƯỚ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_bi40 trên bảng person và chèn các giá trị vào bảng person_archive
employee_bi76Xó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_bi77Chè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_bi78Trình kích hoạt employee_bi40 rất hữu ích để ghi lại bất kỳ nỗ lực thay đổi bảng nào
Tạo Trình kích hoạt SAU KHI XÓA
Tạo trình kích hoạt employee_bi45 với
employee_bi79Trình kích hoạt employee_bi45 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ật
SAU KHI DELETE Ví dụ kích hoạt
Tạo trình kích hoạt employee_bi45 trên người trong bàn để cập nhật bảng average_age với thông tin mới
employee_bi0Xó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_bi45, thông tin không tự động cập nhật
Tạ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 thao tác 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_bi50 và employee_bi51 để biểu thị phần kích hoạt
employee_bi1Đả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_bi2Đầ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
Phần 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