SQL Server: Cơ bản về Trigger
Giải phóng thời gian, khai phóng năng lực
Giới thiệu
Trigger là một thủ tục lưu trữ được thực hiện khi có một nỗ lực để sửa đổi dữ liệu trong bảng được bảo vệ bằng trigger. Không giống như các thủ tục lưu trữ hệ thống tiêu chuẩn, ta không thể thực thi các trigger trực tiếp, chúng cũng không truyền hoặc nhận các tham số. Trigger được định nghĩa trên các bảng cụ thể và những bảng này được gọi là bảng trigger.
Nếu trigger được định nghĩa trên hành động INSERT, UPDATE hoặc DELETE trên một bảng, thì nó sẽ tự hủy khi những hành động này được thực thi. Sự thực thi tự động này của trigger không thể bị phá vỡ. Trong SQL Server, trigger được tạo ra bằng cách sử dụng câu lệnh CREATE TRIGGER. Hình dưới đây thể hiện ví dụ về trigger.
Cách dùng trigger
Trigger có thể chứa logic xử lý phức tạp và thường được sử dụng để duy trì tính toàn vẹn dữ liệu. Dưới đây là một số cách dùng trigger có thể được phân loại như sau:
Phân tầng thay đổi thông qua các bảng liên quan
Người dùng có thể sử dụng một trigger cho các thay đổi tầng thông qua các bảng liên quan. Ví dụ, ta có bảng Salary_Details có khóa ngoại (FOREIGN KEY) nằm trên cột EmpID và tham chiếu tới khóa chính (PRIMARY KEY) là EmpID của bảng Employee_Details. Nếu sự kiện cập nhật hoặc xóa xảy ra trong bảng Employee_Details, thì trigger UPDATE hoặc DELETE có thể được định nghĩa để xếp tầng những thay đổi đối với bảng Salary_Details.
Thực thi toàn vẹn dữ liệu phức tạp hơn ràng buộc CHECK
Không giống như các hạn chế CHECK, trigger có thể tham khảo các cột trong các bảng khác. Tính năng này có thể được sử dụng để áp dụng các kiểm tra tính toàn vẹn dữ liệu phức tạp. Tính toàn vẹn dữ liệu có thể được thực thi bằng cách:
+ Kiểm tra các ràng buộc trước khi xếp tầng các cập nhật hoặc xóa.
+ Tạo ra các trigger nhiều hàng cho các hành động được thực hiện trên nhiều hàng.
+ Thực thi tính toàn vẹn tham chiếu giữa các cơ sở dữ liệu.
Định nghĩa các thông báo lỗi tùy chỉnh
Các thông báo lỗi tùy chỉnh được sử dụng để cung cấp lời giải thích phù hợp hoặc chi tiết hơn trong các tình huống lỗi nhất định. Có thể sử dụng các trigger để gọi các thông báo lỗi tùy chỉnh được xác định trước như vậy khi các điều kiện lỗi có liên quan xảy ra.
Duy trì dữ liệu không chuẩn hóa
Tính toàn vẹn dữ liệu mức thấp có thể được duy trì trong các môi trường cơ sở dữ liệu không chuẩn hóa sử dụng các trigger. Dữ liệu không chuẩn hóa thường đề cập đến dữ liệu dư thừa hoặc bắt nguồn. Ở đây, các trigger được sử dụng cho các kiểm tra không yêu cầu các so khớp chính xác. Ví dụ, nếu giá trị của năm sẽ được kiểm tra đối với các ngày hoàn tất, trigger có thể được sử dụng để thực hiện kiểm tra.
So sánh các trạng thái trước và sau của dữ liệu đang được sửa đổi
Trigger cung cấp tùy chọn này để tham khảo các thay đổi được thực hiện cho dữ liệu bằng các câu lệnh INSERT, UPDATE và DELETE. Điều này cho phép người dùng tham khảo các hàng bị ảnh hưởng khi các sửa đổi được thực hiện thông qua các trigger.
Phân loại trigger
Trigger có thể được đặt để thực thi tự động một hành động khi một sự kiện ngôn ngữ xảy ra trong một bảng hoặc khung nhìn. Các sự kiện ngôn ngữ có thể được phân loại là các sự kiện DML và các sự kiện DDL. Trigger liên quan đến các sự kiện DML được gọi là trigger DML, trong khi trigger kết hợp với các sự kiện DDL được gọi là trigger DDL.
Trigger trong SQL Server có thể được phân thành ba loại cơ bản:
- Trigger DML
Các trigger DML (Data Manipulation Language) được thực thi khi dữ liệu được chèn, sửa đổi hoặc xóa trong một bảng hoặc khung nhìn sử dụng câu lệnh INSERT, UPDATE hoặc DELETE.
- Trigger DDL
Các trigger DDL (Data Definition Language) được thực thi khi một bảng hoặc khung nhìn được tạo ra, chỉnh sửa hoặc xóa bằng cách sử dụng câu lệnh CREATE, ALTER hoặc DROP.
- Trigger đăng nhập (Logon)
Các trigger đăng nhập sẽ thực thi các thủ tục lưu trữ khi một phiên được thiết lập với một sự kiện LOGON. Những trigger này được gọi sau khi chứng thực đăng nhập được hoàn thành và trước khi phiên thực tế được thiết lập. Các trigger đăng nhập kiểm soát các phiên máy chủ bằng cách hạn chế các thông tin đăng nhập không hợp lệ hoặc hạn chế số lượng phiên.
So sánh trigger DDL và trigger DML
Các trigger DDL và DML có cách sử dụng khác nhau và được thực thi với các sự kiện cơ sở dữ liệu khác nhau. Bảng dưới đây liệt kê ra những khác biệt giữa các trigger DDL và DML.
Trigger DDL | Trigger DML |
---|---|
Các trigger DDL thực thi các thủ tục lưu trữ trên câu lệnh CREATE, ALTER và DROP. | Các trigger DML thực thi trên các câu lệnh INSERT, UPDATE và DELETE. |
Các trigger DDL được sử dụng để kiểm tra và kiểm soát các hoạt động của cơ sở dữ liệu. | Các trigger DML được sử dụng để thực thi các quy tắc thương mại khi dữ liệu được sửa đổi trong các bảng hoặc khung nhìn. |
Các trigger DDL chỉ hoạt động sau khi bảng hoặc khung nhìn được sửa đổi. | Các trigger DML thực thi trong hoặc sau khi dữ liệu được sửa đổi. |
Các trigger DDL được định nghĩa ở mức cơ sở dữ liệu hoặc máy chủ. | Các trigger DML được định nghĩa ở mức cơ sở dữ liệu. |
Giải phóng thời gian, khai phóng năng lực