Những hạn chế đã biết của trigger

Xây dựng và Tối ưu hóa Trigger trong SQL Server

Florin Angelescu

Instructor

Ưu điểm của trigger

  • Dùng cho tính toàn vẹn dữ liệu
  • Áp đặt quy tắc nghiệp vụ trực tiếp trong CSDL
  • Kiểm soát câu lệnh được phép trong CSDL
  • Triển khai logic nghiệp vụ phức tạp kích hoạt bởi một sự kiện
  • Cách đơn giản để audit CSDL và hành động người dùng
Xây dựng và Tối ưu hóa Trigger trong SQL Server

Nhược điểm của trigger

  • Khó xem và phát hiện
  • Ẩn với ứng dụng khách hoặc khi debug mã
  • Khó theo dõi logic khi xử lý sự cố
  • Có thể gây tải cho máy chủ và làm chậm hệ thống
Xây dựng và Tối ưu hóa Trigger trong SQL Server

Tìm trigger cấp máy chủ

SELECT * FROM sys.server_triggers;
| name                 | parent_class_desc | create_date | is_disabled |...|
|----------------------|-------------------|-------------|-------------|---|
| DenyNewDatabases     | SERVER            | 2019-01-22  | 0           |...|
| DenyNewLinkedServers | SERVER            | 2019-01-22  | 1           |...|
| DenyDatabaseDelete   | SERVER            | 2019-01-22  | 1           |...|
Xây dựng và Tối ưu hóa Trigger trong SQL Server

Tìm trigger cấp cơ sở dữ liệu và bảng

SELECT * FROM sys.triggers;
| name                   | parent_class_desc | create_date | is_disabled | is_instead_of_trigger |
|----------------------|-------------------|-------------|---------------|-----------------------|
| TrackRetiredProducts   | OBJECT_OR_COLUMN  | 2019-04-19  | 0           | 0                     |
| PreventOrdersUpdate    | OBJECT_OR_COLUMN  | 2019-04-22  | 0           | 1                     |
| TrackDatabaseTables    | DATABASE          | 2019-04-23  | 0           | 0                     |
| KeepCanceledOrders     | OBJECT_OR_COLUMN  | 2019-04-27  | 0           | 0                     |
| DiscountsPreventDelete | OBJECT_OR_COLUMN  | 2019-04-27  | 0           | 1                     |
| PreventNewDiscounts    | OBJECT_OR_COLUMN  | 2019-04-27  | 0           | 1                     |
| PreventTableDeletion   | DATABASE          | 2019-04-27  | 0           | 0                     |
Xây dựng và Tối ưu hóa Trigger trong SQL Server

Xem định nghĩa trigger (cách 1)

Xem định nghĩa Trigger từ SSMS

CREATE TRIGGER PreventOrdersUpdate
ON Orders
INSTEAD OF UPDATE
AS
RAISERROR ('Updates on "Orders" table
            are not permitted.
            Place a new order
            to add new products.', 16, 1);
Xây dựng và Tối ưu hóa Trigger trong SQL Server

Xem định nghĩa trigger (cách 2)

SELECT definition
FROM sys.sql_modules
WHERE object_id = OBJECT_ID ('PreventOrdersUpdate');
| definition                                                   |
|--------------------------------------------------------------|
| CREATE TRIGGER PreventOrdersUpdate                           |
| ON Orders                                                    |
| INSTEAD OF UPDATE                                            |
| AS                                                           |
| RAISERROR ('Updates on "Orders" table are not permitted.     |
|             Place a new order to add new products.', 16, 1); |
Xây dựng và Tối ưu hóa Trigger trong SQL Server

Xem định nghĩa trigger (cách 3)

SELECT OBJECT_DEFINITION (OBJECT_ID ('PreventOrdersUpdate'));
| (No column name)                                             |
|--------------------------------------------------------------|
| CREATE TRIGGER PreventOrdersUpdate                           |
| ON Orders                                                    |
| INSTEAD OF UPDATE                                            |
| AS                                                           |
| RAISERROR ('Updates on "Orders" table are not permitted.     |
|             Place a new order to add new products.', 16, 1); |
Xây dựng và Tối ưu hóa Trigger trong SQL Server

Xem định nghĩa trigger (cách 4)

EXECUTE sp_helptext @objname = 'PreventOrdersUpdate';
| Text                                                         |
|--------------------------------------------------------------|
| CREATE TRIGGER PreventOrdersUpdate                           |
| ON Orders                                                    |
| INSTEAD OF UPDATE                                            |
| AS                                                           |
| RAISERROR ('Updates on "Orders" table are not permitted.     |
|             Place a new order to add new products.', 16, 1); |
Xây dựng và Tối ưu hóa Trigger trong SQL Server

Thực hành tốt với trigger

Mẹo:

  • thiết kế CSDL có tài liệu rõ ràng
  • logic trigger đơn giản
  • tránh lạm dụng trigger
Xây dựng và Tối ưu hóa Trigger trong SQL Server

Ayo berlatih!

Xây dựng và Tối ưu hóa Trigger trong SQL Server

Preparing Video For Download...