Trigger là đối tượng cơ sở dữ liệu. Về cơ bản đây là loại đặc biệt của thủ tục lưu trữ được tự động thực hiện khi một lệnh DDL hay DML được gọi liên quan với sự điều kiện được thực hiện. Trigger được sử dụng để đánh giá dữ liệu trước khi hoặc sau khi sửa đổi dữ liệu bằng cách sử dụng cấu trúc DDL và DML. Đây cũng được sử dụng để bảo vệ tính toàn vẹn dữ liệu, kiểm soát hoạt động máy chủ, kiểm soát một máy chủ và để thực hiện business logic hoặc business rule.
Các loại Triggers
Trong SQL Server chúng ta có thể tạo ra bốn loại trigger Data Definition Language (DDL) trigger, Data Manipulation Language (DML) trigger, CLR trigger và Logon trigger.
DDL Triggers
Trong SQL Server chúng ta có thể tạo ra trigger trên báo cáo DDL (như CREATE, ALTER, và DROP) và hệ thống nhất định xác định các thủ tục được lưu trữ mà thực hiện các hoạt động DDL.Ví dụ: Nếu bạn đang đi để thực thi cấu trúc CREATE LOGIN hoặc sp_addlogin thủ tục lưu trữ để tạo người dùng đăng nhập, sau đó cả hai có thể thực hiện một DDL trigger mà bạn có thể tạo ra trên các sự kiện CREATE_LOGIN của Sql Server.Chúng ta có thể chỉ sử dụng mệnh đề FOR / AFTER trong DDL trigger mà không có mệnh đề INSTEAD OF có nghĩa là chúng ta có thể tạo After Trigger trên cấu trúc DDL.DDL trigger có thể được sử dụng để quan sát và kiểm soát các hành động thực hiện trên máy chủ, và để kiểm soát các hoạt động này. DDL trigger có thể được sử dụng để quản lý các tác vụ quản trị như kiểm soát và điều chỉnh hoạt động cơ sở dữ liệu.DML Triggers
Trong SQL Server chúng ta có thể tạo ra trigger trên cấu trúc DML (như INSERT, UPDATE, và DELETE) và lưu trữ các thủ tục để thực hiện các hoạt động như DML. DML Triggers có hai loạiAfter Trigger (sử dụng FOR / AFTER)
Đây là loại trigger thực thi sau khi SQL Server kết thúc việc thực hiện các sự kiện thành công mà nó thực hiện.Ví dụ: Nếu bạn chèn bản ghi / hàng trong một bảng sau đó trigger liên kết với các trường hợp chèn vào bảng này sẽ chỉ thực thi sau khi liên tiếp vượt qua tất cả những trigger, như hạn chế chính là khóa chính, và một số quy tắc. Nếu chèn bản ghi lỗi, SQL Server sẽ không thực thi After Trigger.Instead of Trigger (sử dụng INSTEAD OF CLAUSE)
Đây là loại thực thi trigger trước khi SQL Server bắt đầu thực hiện các sự kiện sẽ xảy ra. Điều này là khác với After Trigger, nó thực thi sau khi sự kiện xẩy ra. Chúng ta có thể có một Instead insert / update / delete trigger trên một bảng thực hiện thành công nhưng không bao gồm việc insert / update / delete trên bảng.Ví dụ: Nếu bạn insert bản ghi / hàng trong một bảng sau đó trigger liên kết với các sự kiện chèn vào bảng này, sẽ thực hiện vượt qua tất cả những điều kiện, chẳng hạn như khóa chính và một số quy tắc. Nếu insert lỗi, SQL Server sẽ thực thi trigger, tạo ra thông báo.
CLR Triggers
CLR Trigger là loại đặc biệt của trigger dựa trên CLR (Common Language Runtime) trong khuôn khổ net. Tích hợp CLR Trigger đã được giới thiệu với SQL Server 2008 và cho phép trigger để được mã hóa trong một trong các ngôn ngữ .NET như C #, Visual Basic và F #.Chúng ta mã hóa các đối tượng (như trigger) trong CLR có tính nặng hoặc cần tài liệu tham khảo cho các đối tượng bên ngoài SQL Server. Chúng ta có thể viết mã cho cả DDL và DML trigger, bằng cách sử dụng một ngôn ngữ được hỗ trợ CLR như C #, Visual basic và F #. Tôi sẽ thảo luận CLR trigger sau này.Logon Triggers
Logon trigger là loại đặc biệt của trigger mà nó thực thi khi sự kiện LOGON của Sql Server được nâng lên. Sự kiện này được tạo ra khi một phiên sử dụng đang được thành lập với Sql Server được thực hiện sau khi kết thúc giai đoạn xác thực, nhưng trước khi phiên dùng đang thực sự thành lập. Do đó, tất cả các thông điệp mà chúng ta xác định trong trigger như các thông báo lỗi, sẽ được chuyển đến SQL Server lỗi đăng nhập. Logon trigger không thực thi nếu không xác thực. Chúng ta có thể sử dụng các trigger để theo dõi và kiểm soát phiên máy chủ, chẳng hạn như để theo dõi hoạt động đăng nhập hoặc giới hạn số buổi cho một đăng nhập cụ thể.Synatx cho Logon Kích hoạt- CREATE TRIGGER trigger_name
- ON ALL Server
- [ WITH ENCRYPTION ]
- { CHO | AFTER} LOGON
- AS
- sql_statement [ 1. .. n ]
Cú pháp Trigger
- CREATE TRIGGER trigger_name
- ON { table | view }
- [ WITH ENCRYPTION | EXECUTE AS ]
- { CHO | AFTER| INSTEAD OF } {[ CREATE | ALTER | DROP | INSERT | UPDATE | DELETE ]}
- [ NOT FOR REPLICATION ]
- AS
- sql_statement [ 1. .. n ]
trigger_name
Đây là tên của trigger. Nó phải phù hợp với các quy tắc cho các định danh trong Sql Server.Table | view
Đây là table / view trên đó trigger sẽ được tạo ra.ENCRYPTION
Nếu tùy chọn này được quy định, văn bản gốc của câu lệnh CREATE TRIGGER sẽ được mã hóa.EXECUTE AS
Tùy chọn này xác định, trong bối cảnh an ninh theo đó trigger được thực hiện.FOR / AFTER
FOR / AFTER định rằng trigger là After Trigger. AFTER là mặc định, if FOR là từ khóa chỉ định. sau khi trigger không thể được định nghĩa về các view.INSTEAD OF
INSTEAD OF xác định rằng Trigger là Instead Of Trigger.CREATE | ALTER | DROP | INSERT | UPDATE | DELETE
Những hành động mà trigger có thể thực thiNOT FOR REPLICATION
Chỉ ra rằng trigger không nên được thực hiện khi một quá trình sao chép đổi các bảng tham gia vào việc trigger.AS
Sau khi chúng ta xác định các hành động này và điều kiện thực hiện trigger.sql_statement
Đây là những điều kiện và hành động trigger. Những hành động trigger được quy định trong câu lệnh T-SQL.
Chú ý
- Tên của một kích hoạt nên thực hiện theo các quy tắc để định danh.
- DML trigger có thể được tạo bởi bất kỳ câu lệnh T-SQL, trừ CREATE DATABASE, ALTER DATABASE, DROP DATABASE, LOAD DATABASE, LOAD LOG, RECONFIGURE, RESTORE DATABASE, và RESTORE LOG.
- Bạn không thể tạo lại các trigger trong các bảng hệ thống hoặc quan điểm quản lý năng động. Hơn nữa, cú pháp TRUNCATE TABLE không thực thi một trigger bởi vì hoạt động này không đăng nhập xóa từng hàng riêng lẻ.
- Nếu bạn sử dụng tùy chọn DATABASE, phạm vi DDL trigger của bạn sẽ là cơ sở dữ liệu hiện hành. Nếu bạn sử dụng tùy chọn SEVER ALL, phạm vi DDL trigger của bạn gây ra cho các máy chủ hiện tại.
- After trigger không thể định nghĩa trên view.
- AFTER là mặc định, if FOR là từ khóa chỉ định.
Tóm lược
Trong bài viết này tôi cố gắng giải thích các loại Sql Server trigger. Tôi hy vọng sau khi đọc bài viết này ,khái niệm sql trigger của bạn sẽ được nâng cao. Tôi sẽ dicuss tất cả các trigger với các ví dụ trong bài viết tiếp theo của tôi. Tôi muốn có thông tin phản hồi từ bạn đọc blog của tôi. Xin vui lòng gửi thông tin phản hồi của bạn, câu hỏi hoặc ý kiến về bài viết này.
No comments:
Post a Comment