Hướng dẫn cách sử dụng Trigger trong SQL

Khi nhập môn cơ sở dữ liệu, bạn sẽ được gặp khái niệm Trigger. Vậy Trigger là gì? Các câu lệnh Trigger trong SQL ra sao? Tino Group sẽ đưa ra những ví dụ đơn giản để giúp bạn hiểu rõ về Trigger nhé!

Trigger là gì?

Trigger là một stored procedure không có tham số, khi có một event như: Thêm, cập nhật hay xóa trong cơ sở dữ liệu xảy ra Trigger sẽ thực thi tự động thay đổi dữ liệu.

Bạn hoàn toàn có thể sử dụng Trigger trên rất nhiều ứng dụng quản trị cơ sở tài liệu. Nhưng trong bài viết này, Tino Group sẽ hướng dẫn bạn sử dụng ứng dụng SQL Server của Microsoft để thực thi bạn nhé !
trigger-trong-sql

SQLs sẽ cung cấp cho bạn 3 loại Trigger chính như sau:

  • Trigger DML sẽ được kích hoạt khi xay ra các sự kiện: insert, update và delete với dữ liệu trên bảng.
  • Trigger DDL được kích hoạt khi xảy ra các lệnh như: create, alter và drop.
  • Trigger Logon sẽ tự động kích hoạt trước khi các sự kiện logon xảy ra.

Khi nào nên sử dụng Trigger SQL?

Có rất nhiều cách để sử dụng Trigger, rất nhiều lập trình viên sử dụng Trigger để :

  • Kiểm tra ràng buộc trên nhiều quan hệ hoặc nhiều dòng của bảng cơ sở dữ liệu.
  • Sử dụng để tạo các hàm ngầm phục vụ cho một số mục nhất định, tuy nhiên, những trường hợp sử dụng hàm ngầm là rất hiếm và không nên sử dụng trong các mục đích như: kinh doanh – giao dịch thanh toán.
  • Sử dụng để không cho việc xóa những dữ liệu quan trọng xảy ra.

Ưu và nhược điểm của Trigger

Ưu điểm của Trigger

  • Code của Trigger trong SQL rất dễ học, dễ hiểu và dễ viết
  • Tỏ ra rất hiệu quả trong việc kiểm soát những thay đổi trong cơ sở dữ liệu
  • Là một phương pháp để thực hiện nhanh chóng những công việc lên lịch định kỳ
  • Khả năng bắt lỗi business logic nằm ở mức độ cơ sở dữ liệu
  • Bạn có thể viết lồng các Trigger lên đến 32 cấp độ! Nếu bạn chưa rõ, bạn có thể thử tham khảo bài viết Hướng dẫn sử dụng hàm IF nhiều điều kiện trong Excel để hiểu chúng lồng nhau như thế nào.

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

  • Trigger chỉ hỗ trợ để kiểm tra mức độ hợp lệ của các dữ liệu, điều kiện chứ không hoàn toàn thay thế công việc kiểm tra của bạn.
  • Từ phía client, bạn chỉ có thể biết được sự tồn tại của các Trigger nếu nhà cung cấp gửi tài liệu cho bạn.
  • Trigger hoạt động ngầm, vì thế bạn cũng khó lòng biết điều gì đang diễn ra ở phía dưới cơ sở dữ liệu.
  • Khi thực hiện các update, Trigger sẽ làm gia tăng lượng công việc trên cơ sở dữ liệu và làm hệ thống bị chậm.
  • Cũng khá giống với hàm if nhiều điều kiện trong Excel, nếu bạn lồng quá nhiều điều kiện lại với nhau, việc sửa lỗi, gỡ lỗi và khắc phục các sự cố là vô cùng khó! Đặc biệt là đối với những người không phát triển cơ sở dữ liệu hay Trigger đó ngay từ đầu.
  • Khi viết lệnh Trigger, bạn sẽ phải xem xét đến quyền của các user, nếu user có quyền after trên bản cơ sở dữ liệu, họ sẽ có thể vô hiệu hóa chúng.

Câu lệnh Trigger trong SQL

Mẫu ví dụ

Để bài viết sinh động và dễ hiểu hơn, một ví dụ là vô cùng cần thiết. Đây là bản production.products thuộc cơ sở dữ liệu Bike Stores tại trang Comdy.vn.

trigger-trong-sql

Câu lệnh create Trigger trong SQL

Câu lệnh này sẽ tự động hóa thực thi khi có bất kể một sự kiện nào như : insert, delete và update diễn ra với bảng .
Câu lệnh như sau :

CREATE Trigger [schema_name.]Trigger_name

ON table_name

AFTER {[INSERT],[UPDATE],[DELETE]}

[NOT FOR REPLICATION]

AS

{SQL_statements}

Phân tích ra, bạn hoàn toàn có thể thấy cú pháp này chứa :

schema_name là tên schema của Trigger, đây là một tùy chọn, bạn có thể thêm hoặc không.

Trigger_name là tên do người dùng đặt.

table_name là bảng chúng ta sẽ áp dụng Trigger

Tạo bản ghi lại sự kiện INSERT hoặc DELETE

Đây là một việc vô cùng thiết yếu, khi bất kể ai xâm phạm phạm pháp, bạn vẫn sẽ có một bảng tàng trữ để Phục hồi lại nếu thiết yếu .
Câu lệnh như sau :

CREATE Trigger production.trg_product_audit // sử dụng để tạo một Trigger mới

ON production.products // chỉ định bảng ghi Trigger kích hoạt khi có sửa đổi

AFTER INSERT, DELETE // thêm các sự kiện khiến Trigger kích hoạt

AS // đây là phần bắt đầu của Trigger

BEGIN

SET NOCOUNT ON; // thiết lập dùng để ngăn chặn thông báo số lượng bảng ghi bị ảnh hưởng cho đến khi Trigger được kích hoạt.

INSERT INTO production.product_audits( // đây là phần toán từ union ALL

product_id,

product_name,

brand_id,

category_id,

model_year,

list_price,

updated_at,

operation

)

SELECT

i.product_id,

product_name,

brand_id,

category_id,

model_year,

i.list_price,

GETDATE(),

‘INS’

FROM

inserted i

UNION ALL

SELECT

d.product_id,

product_name,

brand_id,

category_id,

model_year,

d.list_price,

GETDATE(),

‘DEL’

FROM

deleted d;

END

Giờ đây, bảng production. product_audits đã được thêm những thông tin thuộc bảng production.products. Khi có bất kể đổi khác gì xảy ra, những biến hóa sẽ được ghi nhận tại những cột : updated_at, operation và change_id .
Cuối cùng, bạn hoàn toàn có thể tìm thấy Trigger của bạn tại đây :
trigger-trong-sql

Tạo lệnh kiểm tra hoạt động của Trigger

Trước tiên, bạn cần chèn câu lệnh sau vào bảng ghi production.products :
INSERT INTO production.products

(

product_name,

brand_id,

category_id,

model_year,

list_price

)

VALUES

(

‘Test product’,

1,

1,

2018,

599

);

Để xem nội dung của bảng ghi production. product_audits. Bạn sử dụng lệnh như sau :

SELECT

*

FROM

production.product_audits;

Câu lệnh xóa

Để xóa một hàng trong bảng production.products, bạn sử dụng lệnh :

DELETE FROM

production.products

WHERE

product_id = 322;

Để hiện hàng bị xóa trong bảng production. product_audits, bạn sử dụng lệnh như sau :

SELECT

*

FROM

production.product_audits;

Cách disable Trigger trong SQL server

Trong lúc chỉnh sửa tài liệu hoặc khắc phục những sự cố trong cơ sở tài liệu, việc tắt Trigger sẽ rất cần đấy bạn. Vì nếu không tắt đi và bạn chỉnh luôn, đôi lúc bạn sẽ bị ngăn ngừa lại hoặc nhật ký ghi lỗi sẽ bị “ spam ” bởi chính bạn .
Để tắt Trigger trong thời điểm tạm thời, bạn sử dụng câu lệnh DISABLE Trigger như sau :

DISABLE Trigger [schema_name.][Trigger_name]

ON [object_name | DATABASE | ALL SERVER]

Phân tích ra :
Đầu tiên, bạn sẽ cần phải chỉ định bảng và schema cần tắt Trigger .
Để tắt hàng loạt Trigger, bạn hoàn toàn có thể thực thi lệnh với ví dụ tắt hàng loạt Trigger trong bảng sales.members như sau :
Tạo bản ghi Trigger sự kiện xóa :

CREATE Trigger sales.trg_members_delete

ON sales.members

AFTER DELETE

AS

BEGIN

PRINT ‘A new member has been deleted’;

END;

Lệnh xóa hàng loạt Trigger tại bản sales.members :

DISABLE Trigger ALL ON sales.members;

Qua bài viết, bạn đã hoàn toàn có thể nắm sơ bộ được về nội dung của Trigger trong SQL, biết được Trigger là gì. Tino Group hy vọng bạn đã có được những kiến thức và kỹ năng hữu dụng để ship hàng cho việc học tập về cơ sở tài liệu của mình. Một lần nữa, Tino Group xin chúc bạn có được nhiều bước vượt bật trên con đường tăng trưởng sự nghiệp lập trình của mình .

Những câu hỏi thường gặp về Trigger

Học thêm về Trigger ở đâu?

Nếu bạn có mong ước học thêm về Trigger, bạn hoàn toàn có thể tìm hiểu thêm bộ documentation của IBM về Trigger ngay tại đây. Điều kiện tiên quyết là bạn cần phải có nền tảng tiếng Anh cơ bản để đọc được những tài liệu quốc tế nhé !

Phần mềm quản lý cơ sở dữ liệu nào là tốt nhất?

Để quản trị cơ sở tài liệu, bạn sẽ có rất nhiều lựa chọn ứng dụng. Trong chương trình ĐH, bạn hoàn toàn có thể sử dụng ứng dụng SQL Server của Microsoft, đây là ứng dụng được những thầy của tôi hướng dẫn sử dụng nhiều nhất. Hoặc bạn hoàn toàn có thể tìm hiểu thêm những ứng dụng khác như : MySQL, Sybase, Informix, Postgres, MS Access, Oracle, …

Học SQL miễn phí ở đâu?

Để học cách sử dụng ngôn từ SQL một cách tốt nhất và trọn vẹn không tính tiền, bạn hoàn toàn có thể truy vấn ngay vào trang W3Schools để học nhé ! W3Schools cung ứng bộ chương trình chuyên nghiệp, có những ví dụ thực tiễn và giúp bạn thực hành thực tế lập trình ngay trên trình duyệt .

Tải SQL Server miễn phí ở đâu?

Rất như mong muốn, Microsoft có tung ra bản SQL Server 2019 Developer full tính năng và trọn vẹn không lấy phí để tăng trưởng và thử nghiệm SQL cho những lập trình viên cá thể, sinh viên sử dụng .
Bạn hoàn toàn có thể tải phiên bản SQL Server 2019 Developer trọn vẹn không lấy phí tại đây .

CÔNG TY CỔ PHẦN TẬP ĐOÀN TINO

  • Trụ sở chính: L17-11, Tầng 17, Tòa nhà Vincom Center, Số 72 Lê Thánh Tôn, Phường Bến Nghé, Quận 1, Thành phố Hồ Chí Minh
    Văn phòng đại diện: 42 Trần Phú, Phường 4, Quận 5, Thành phố Hồ Chí Minh
  • Điện thoại: 0364 333 333
    Tổng đài miễn phí: 1800 6734
  • Email: [email protected]
  • Website: www.tino.org

5/5 – ( 2 bầu chọn )