Trigger trong SQL là gì? Cách tạo & xóa Trigger trong SQL

Trigger trong SQL là gì? Cách tạo & xóa Trigger trong SQL

Tác giả: FPT Cloud
00:00

Trigger trong SQL là gì? Trigger có vai trò gì trong SQL Server? Chúng có những ưu điểm, nhược điểm cụ thể như thế nào? Bạn đã biết cách  tạo Trigger trong SQL hay chưa? Bài viết dưới đây sẽ cung cấp cho bạn những thông tin cần thiết và chính xác nhất về những thắc mắc này.

Trigger trong SQL là gì?

Trigger sql là gì? Trigger trong SQL chính là một đoạn procedure code, chúng sẽ vận hành chỉ khi có một sự kiện nào đó xảy ra. Để có thể kích hoạt trigger trong SQL server chúng ta có thể sử dụng rất nhiều loại sự kiện khác nhau. Một trong số đó có thể nhắc đến việc chèn hàng vào trong bảng, làm lại/ thay đổi cấu trúc bảng, đăng nhập vào một phiên bản server mới,… Dưới đây là những đặc điểm chính khiến trigger SQL không giống với những stored procedures:

  • Người dùng sẽ không thể làm thủ công các trigger.
  • Trigger sẽ không có cơ hội để nhận được thông số.
  • Người dùng không thể khôi phục transaction trong trigger.

Vấn đề không thể dùng những tham số không phải là hạn chế để có thể nhận các thông tin từ sự kiện. Người dùng sẽ có những lựa chọn thay thế khác để lấy được thông tin từ sự kiện.

Cấu trúc cú pháp của Trigger

Để tạo được một Trigger, người dùng cần sử dụng đến câu lệnh CREATE TRIGGER:

Trong đó:

  • Thời gian kích hoạt sẽ có thể là BEFORE/AFTER. Người dùng cần định rõ thời gian kích hoạt. BEFORE được sử dụng khi muốn xử lý hành động trước khi thay đổi và AFTER là cần xử lý hành động sau quá trình thay đổi.
  • Sự kiện có thể là những yếu tố INSERT, UPDATE, DELETE.
  • Trình kích hoạt sẽ cần được liên kết với bảng cụ thể, lúc này từ khóa ON được dùng để xác định.

Có mấy lớp Trigger trong SQL Server?

Trong SQL Server sẽ có hai lớp trigger. Cụ thể, các lớp này có những đặc điểm như thế nào? Cùng phân tích cụ thể hơn ở nội dung ngay dưới đây.

DDL Trigger

DDL là viết tắt của cụm Data Definition Language. DDL trigger sẽ kích hoạt khi những sự kiện bị thay đổi cấu trúc như việc tạo, sửa đổi, bỏ bảng. Cũng có thể xuất hiện trong những sự kiện liên quan tới server (sửa đổi bảo mật, cập nhật thống kê).

DML Trigger

DML là viết tắt của cụm từ Data Modification Language. DML trigger là một loại trigger phổ biến và được sử dụng nhiều nhất hiện nay. Lúc này, việc kích hoạt chính là câu lệnh sửa đổi dữ liệu. Đó có thể là một câu lệnh chèn vào bảng, cập nhật bảng hoặc xóa bỏ bảng.

Bên cạnh đó, DML trigger cũng có những loại khác như:

  • FOR hoặc AFTER [[INSERT, UPDATE, DELETE]: Được sử dụng sau khi lệnh kích hoạt được kết thúc.
  • INSTEAD OF [INSERT, UPDATE, DELETE]: Loại này trái ngược lại hoàn toàn với FOR (AFTER). Chúng thực thi chứ không phải sử dụng để thay cho câu lệnh kích hoạt. Hiểu rõ hơn, đây là loại trigger có thể thay thế câu lệnh kích hoạt. Việc này thật sự rất hữu ích khi người dùng cần tính toàn vẹn tham chiếu database chéo.

>>> Có thể bạn quan tâm: Assembly là gì? Tìm hiểu về ngôn ngữ Assembly từ A – Z

Vai trò của Trigger trong SQL Server

Relational databases có đặc điểm là tính nhất quán dữ liệu. Nghĩa là những thông tin được lưu trong database là nhất quán. Chúng nhất quán trong mọi session và transaction. Cách để những công cụ relational database (SQL server) thực hiện bằng việc thực thi bắt buộc những primary key và foreign key.

Tại SQL Server, người dùng sẽ không có cơ hội để thực thi tính toàn vẹn tham chiếu bảng bằng foreign key nếu những bảng này thuộc database hoặc server khác nhau. Lúc này, cách duy nhất để xử lý chính là dùng đến trigger trong sql.

Vậy Trigger được dùng khi nào? Chúng thường được dùng khi cần kiểm tra bắt buộc trên nhiều bảng hoặc nhiều dòng của bảng. Bên cạnh đó, sử dụng Trigger còn giúp những chương trình đang có hàm chạy ngầm. Việc này phục vụ cho những trường hợp hữu hạn. Thông thường sẽ không được sử dụng cho những mục đích khác như kinh doanh hoặc giao dịch. Điều này thật sự quan trọng bởi chúng sẽ ngăn chặn việc những dữ liệu bảo mật, quan trọng bị xóa mất.

Đánh giá ưu nhược điểm của Trigger SQL

Để có thể đánh giá trigger trong sql một cách cụ thể hơn, cần có một cái nhìn chi tiết về những ưu điểm và nhược điểm. 

Ưu điểm

Những ưu điểm của Trigger nổi bật phải nhắc đến:

  • Khả năng bắt lỗi business logic ở mức cơ sở dữ liệu.
  • Người dùng có thể sử dụng chúng như một công cụ thay thế cho việc hẹn giờ theo lịch.
  • Trigger cũng vô cùng hiệu quả nếu dùng để kiểm soát sự thay đổi xuất hiện trong bảng dữ liệu.

Nhược điểm

Bên cạnh những ưu điểm vượt trội, Trigger vẫn có những hạn chế nhất định mà bạn cần phải biết:

  • Đây chỉ là một phần mở trong quá trình kiểm tra tính hợp lệ của dữ liệu. Chúng không thể thay thế công việc này một cách hoàn toàn.
  • Trigger hoạt động ngầm bên trong cơ sở dữ liệu chứ không hiện ở giao diện. Vì vậy, rất khó để chỉ ra tầng cơ sở dữ liệu đang xảy ra điều gì.
  • Trigger thực hiện quá trình update lên bảng dữ liệu. Đó là lý do khiến chúng làm tăng lượng công việc, khiến hệ thống chạy chậm lại.

Hướng dẫn tạo Trigger trong SQL bằng ví dụ cụ thể

Vậy làm sao để tạo trigger trong sql, viết trigger trong sql? Bạn có thể xem công thức và ví dụ cụ thể ngay dưới đây để biết cách làm.

Tạo bảng ghi

Để tiến hành tạo bảng ghi, câu lệnh CREATE TABLE sẽ được đặt tên production.product_audits. Chúng được sử dụng để ghi lại những thông tin khi INSERT hoặc DELETE xuất hiện sự kiện với table = production.products

Bảng production.product_audits sẽ xuất hiện những cột từ bảng production.products. Cùng với đó, chúng còn có thêm những cột được sử dụng để ghi lại các thay đổi. Ví dụ điển hình là 

updated_at, operation và change_id.

Tạo DML Trigger

  • Để tạo DML Trigger, trước tiên chúng ta cần tạo trigger mới, chúng sẽ chỉ định tên trigger và schema xuất hiện trong đề bài: 
    • (CREATE TRIGGER production.trg_product_audit)
  • Sau đó, cần chỉ định tên bảng mà trigger sẽ được kích hoạt ngay khi một sự kiện xuất hiện: (ON production.products)
  • Liệt kê một hay nhiều sự kiện sẽ call trigger tại lệnh AFTER: 
    • (AFTER INSERT, DELETE)
  • Nội dung của Trigger sẽ được khởi đầu với từ khóa AS: 
    • (AS
    • BEGIN)
  • Trong Trigger, người dùng cần thiết lập SET NOCOUNT để ON, việc này nhằm ngăn chặn số hàng sẽ bị trả lại trong trường hợp trigger gặp vấn đề:
    • (SET NOCOUNT ON;)
  • Trigger sẽ chèn cột vào bảng production.product_audits khi một row được insert hoặc delete. Những dữ liệu được cung cấp để chèn từ INSERTED và DELETED sẽ phải thông qua UNION ALL.
  • Gộp các phần lại với nhau.
  • Sau cùng, bạn bắt đầu thực hiện tất cả các câu lệnh để tiến hành tạo trigger trong SQL. Bạn có thể tìm thấy trigger được tạo trong folder trigger.

Kiểm tra Trigger

Bạn tiến hành kiểm tra trigger bằng cách chèn câu lệnh dưới đây vào hàng mới trong production.products:

Sau đó, xem lại nội dung của bảng production.product_audits:

(SELECT 

    * 

FROM 

    production.product_audits;)

>>> Có thể bạn quan tâm: OS là gì? Tìm hiểu về hệ điều hành (Operating System) từ A-Z

Lệnh xóa Trigger trong SQL

Lệnh DROP TRIGGER được dùng để xóa trigger trong sql. Cú pháp cụ thể là:

Bài viết trên của FPT Cloud cung cấp cho bạn những thông tin và kiến thức về trigger trong SQL. Mặc dù việc dùng trigger không phải là yêu cầu bắt buộc nhưng chúng vẫn thường được dùng trong nhiều mục đích riêng khác nhau. Mong rằng bài viết đã thật sự mang lại cho bạn những thông tin bổ ích.

Liên hệ với chúng tôi để biết thêm thông tin chi tiết về dịch vụ của FPT Smart Cloud

 

48