Trigger

Trigger

Trigger là một đối tượng thường được sử dụng trong CSDL với mục đích đảm bảo tính toàn vẹn của dữ liệu. Tương tự như thủ tục lưu trữ, một trigger là một đối tượng chứa một tập các câu lệnh SQL và tập các câu lệnh này sẽ được thực thi khi người sử dụng có lời gọi đến chúng còn các trigger lại được gọi tự động khi xảy ra những giao tác làm thay đổi dữ liệu trong cá bảng

Mỗi một trigger được tạo ra và gắn liền với một bảng nào đó trong CSDL. Khi dữ liệu trong bảng bị thay đổi (tức là khi bảng chịu tác động của các câu lệnh INSERT, UPDATE, DELETE) thì trigger sẽ được tự động kích hoạt.

Sử dụng trigger một cách hợp lý trong CSDL sẽ có tác động rất lớn trong việc tăng hiệu năng của CSDL. Các trigger thực sự hữu dụng với những khả năng sau:

  • Một trigger có thể nhận biết, ngăn chặn hoặc hủy bỏ những thao tác làm thay đổi trái phép dữ liệu trong CSDL.

  • Các thao tác trên dữ liệu (xóa, cập nhật, bổ sung) có thể được trigger phát hiện ra và tự động thực hiện một loạt các thao tác trên CSDL nhằm đảm bảo tính hợp lệ của dữ liệu.

  • Thông qua trigger, ta có thể tạo và kiểm tra được những mối quan hệ phức tạp hơn giữa các bảng trong CSDL mà bản thân các ràng buộc không thể thực hiện được.

Định nghĩa Trigger

Một trigger là một đối tượng gắn liền với một bảng và được tự động kích hoạt khi xảy ra những giao tác làm thay đổi CSDL trong bảng. Định nghĩa một trigger bao gồm các yếu tố sau:

  • Trigger sẽ được áp dụng đối với bảng nào?

  • Trigger được kích hoạt khi câu lệnh nào được thực thei trên bảng?

  • Trigger sẽ làm gì khi được kích hoạt?

Câu lệnh CREATE TRIGGER được sử dụng để định nghĩa trigger và có cú pháp như sau:

   CREATE TRIGGER tên_trigger
   ON tên_bảng
   FOR {[INSERT][,][UPDATE][,][DELETE]}
   AS
       [IF UPDATE(tên_cột)
          [AND UPDATE(tên_cột) | OR(tên_cột)]
       ...]
       các_câu_lệnh_của_trigger

Chuẩn SQL định nghĩa hai bảng logic INSERTED và DELETED để sử dụng trong các trigger. Cấu trúc của hai bảng này tương tự như cấu trúc của bảng mà trigger tác động. Dữ liệu trong hai bảng này tùy thuộc vào câu lệnh tác động lên bảng làm kích hoạt trigger, cụ thể trong các trường hợp sau:

  • Khi câu lệnh DELETE được thực thi trên bảng, các dòng dữ liệu bị xóa sẽ được sao chép vào bảng DELETED. Bảng INSERTED trong trường hợp này không có dữ liệu.

  • Dữ liệu trong bảng INSERTED sẽ là dòng dữ liệu được bổ sung và bảng gây nên sự kích hoạt đối với trigger bằng câu lệnh INSERT. Bẩng DELETED trong trường hợp này không có dữ liệu.

  • Khi câu lệnh UPDATE được thực thi trên bảng, các dòng dữ liệu cũ chịu sự tác động của câu lệnh sẽ được sao chép vào bảng DELETED, còn trong bảng INSERTED sẽ là các dòng sau khi đã được cập nhật.

Trên đây là một vài kiến thức cơ bản giúp mọi người hiểu phần nào về câu truy vấn trigger và tác dụng của nó đối với việc đảm bảo tính toàn vẹn dữ liệu. Trong các bài viết sau, mình sẽ đề cập sâu hơn về cách sử dụng và một vài ví dụ của trigger._

Cám ơn mọi người đã đọc!