Trigger trong SQL là gì? Cách sử dụng và ví dụ | BKHOST

Khi học và làm SQL bạn sẽ biết tới rất nhiều hàm, cú pháp câu lệnh truy vấn. Chắc hẳn bạn đã từng nghe qua về Store procedure và Trigger .

Vậy SQL Trigger là gì và có ý nghĩa như thế nào? Đây là câu hỏi rất nhiều người mới tiếp xúc với cấu trúc dữ liệu đặt ra.

Trong bài viết ngày thời điểm ngày hôm nay, hãy cùng chúng tôi tìm hiểu và khám phá sâu hơn về Trigger, khi nào nên dùng chúng và những ví dụ đơn cử dễ tưởng tượng nhất .

SQL Trigger là gì ?

SQL Trigger la gi

Nếu bạn đã từng biết qua Store procedure thì chắc chắn sẽ nghe tới SQL Trigger. Có thể nói, Trigger là một trường hợp đặc biệt của Store procedure vì nó không có tham số. Trong đó thường sử dụng cho 3 sự kiện là Insert, Update và Delete. Tuy nhiên nếu Store chỉ có thể chạy khi người dùng gọi thì Trigger thực thi hoàn toàn tự động.

Điều này có nghĩa khi bạn thực thi 1 số ít sự kiện làm biến hóa tài liệu trong SQL tương thích với điều kiện kèm theo thì nó sẽ kích hoạt. Trong những trường hợp ví dụ như :

  • Bạn thiết lập một Trigger insert cho thư viện sách. Nếu có thêm một quyển sách nào đó mới được thêm vào thì số lượng sách sẽ cộng thêm 1. Trigger này sẽ chạy tự động khi người dùng ấn Insert thêm sách mới.
  • Người dùng tạo Trigger cho việc update cho thư viện khi có người tới mượn sách. Trong trường hợp số quyển còn lại = số quyển sách trong kho – số sách đã mượn. Trigger chạy tự động khi quá trình update diễn ra.
  • Hoặc có thể tạo một Trigger khi admin cố gắng xóa một quyển sách nào đó trong thư viện. Bạn yêu cầu họ kiểm tra số lượng sách trong kho còn lại khi thực hiện thao tác này.

Để những Trigger được kích hoạt thì việc xảy ra với cơ sở tài liệu cần phân phối đúng thứ tự thao tác hoặc điều kiện kèm theo. Nó sẽ diễn ra một cách tự động hóa mà bạn không cần phải làm bất kỳ điều gì khác .

Các kiểu Trigger trong SQL

Trong SQL, bạn sẽ gặp phải 3 loại Trigger như sau :

  • Trigger cho DML (ngôn ngữ thao tác dữ liệu): bao gồm 3 kiểu là INSERT, UPDATE và DELETE.
  • Trigger cho DDL (ngôn ngữ định nghĩa dữ liệu): sử dụng cho các lệnh CREATE, ALTER và DROP.
  • Trigger cho LOGON: sử dụng để kiểm soát các lệnh khi đăng nhập vào máy chủ.

Trong đó, SQL Trigger cho DML được sử dụng nhiều nhất và có ứng dụng cao nhất. Vậy nên trong bài viết này chúng tôi đề cập hầu hết tới cách sử dụng với DML .

Cách sử dụng SQL Trigger

Cú pháp của Trigger trong SQL như sau:

CREATE TRIGGER 
ON 
{FOR | AFTER | INSTEAD OF} {[INSERT] [,] [UPDATE] [,] [UPDATE]}
AS

Trong đó:

  • có thể là một hoặc một chuỗi lệnh. Chúng sẽ được thực hiện khi thời điểm kích hoạt được xác định (FOR, INSERT, UPDATE,…).
  • FORAFTER sẽ thực thi Trigger sau khi câu lệnh kích hoạt kết thúc.
  • INSTEAD OF: thay thế cho câu lệnh kích hoạt, giúp tham chiếu chéo toàn vẹn dữ liệu.
  • INSERT, UPDATE, UPDATE là lệnh kích hoạt cho Trigger chạy có thể dùng một hoặc nhiều tùy chọn.

Vì Trigger được chạy tự động hóa nên bạn hoàn toàn có thể ứng dụng như sau :

  • Khi kích hoạt việc INSERT có thể thêm một số câu lệnh đi kèm sau khi đã chèn.
  • Thực hiện các tác vụ bổ sung sau khi chèn bằng cách UPDATE giá trị trong bảng.
  • Kiểm tra các bản ghi liên quan trước khi xóa.
  • Cập nhật các giá trị sau khi đã xóa xong.

Nhìn chung nếu bạn biết về SQL Trigger sẽ rất thuận tiện thao tác và ứng dụng nó .

Ví dụ về Trigger trong SQL

Cũng về bài toán mượn sách trong thư viện ta có 2 bảng tài liệu như sau :Bảng Kho_Sach :

Kho_Sach
IDSach
MaSach
TenSach
SoLuong

Bảng Muon_Sach:

Muon_Sach
IDMuon
MaSach
SLMuon
District

Vấn đề đặt ra khi hành vi mượn sách sẽ có những trường hợp sau :

  • Học sinh muốn mượn thêm một vài quyển sách nữa → sinh ra lệnh update vào bảng Muon_Sach. Vậy nên số lượng sách trong Kho sẽ thay đổi.
  • Học sinh không muốn mượn nữa, số lượng sách đã insert sẽ trả về kho, hủy phiếu mượn.
  • Học sinh mượn thành công thì số lượng sách trong Kho sẽ phải cập nhật lại.

Chúng ta sẽ xử lý yếu tố này bằng 3 Trigger như sau :

Ví dụ Trigger INSERT

SQL Trigger sau đây sẽ cập nhật số lượng hàng tồn sau khi học sinh tiến hành mượn sách:

CREATE TRIGGER t_MuonSach ON Muon_Sach AFTER INSERT
AS BEGIN
UPDATE Kho_Sach
SET SoLuong = SoLuong - (SELECT SLMuon FROM inserted WHERE MaSach = Kho_Sach.MaSach)
FROM Kho_Sach JOIN inserted ON Kho_Sach.MaSach = inserted.MaSach
END

Trong ví dụ này, chúng ta thấy bảng inserted, Trigger truy cập vào bảng inserted và cho phép bạn lấy các giá trị mong muốn. Trigger sẽ được kích hoạt sau khi sự kiện mượn sách tiến hàng. Lúc đó bạn truy vấn cơ sở dữ liệu của bảng Kho_Sach sẽ thấy số lượng sách mượn đã bị trừ đi.

Ví dụ Trigger DELETE

Trong ví dụ này, tất cả chúng ta thấy bảng inserted, Trigger truy vấn vào bảng inserted và được cho phép bạn lấy những giá trị mong ước. Trigger sẽ được kích hoạt sau khi sự kiện mượn sách tiến hàng. Lúc đó bạn truy vấn cơ sở tài liệu của bảng Kho_Sach sẽ thấy số lượng sách mượn đã bị trừ đi .

Trigger dưới đây sẽ sử dụng cho trường hợp người mượn hủy không muốn mượn nữa. Câu lệnh thực hiện sẽ như sau:

CREATE TRIGGER t_HuyMuonSach ON Muon_Sach FOR DELETE
AS BEGIN
UPDATE Kho_Sach
SET SoLuong = SoLuong + (SELECT SLMuon FROM deleted WHERE MaSach = Kho_Sach.MaSach)
FROM Kho_Sach JOIN deleted ON Kho_Sach.MaSach = deleted.MaSach
END

Trigger sẽ được kích hoạt khi bạn hủy việc mượn sách. Số lượng sách trong kho sau khi truy vấn SELECT vẫn sẽ được bảo toàn.

Trigger sẽ được kích hoạt khi bạn hủy việc mượn sách. Số lượng sách trong kho sau khi truy vấn SELECT vẫn sẽ được bảo toàn .

Trigger dưới đây sẽ kích hoạt khi bạn đã mượn sách thành công. Kho_Sach lúc này sẽ được cập nhật lại. Cú pháp sẽ như sau:

CREATE TRIGGER t_CapNhatMuonSach ON Muon_Sach AFTER UPDATE
AS BEGIN
UPDATE Kho_Sach
SET SoLuong = SoLuong -
(SELECT SLMuon FROM inserted WHERE MaSach = Kho_Sach.MaSach) +
(SELECT SLMuon FROM deleted WHERE MaSach = Kho_Sach.MaSach)
FROM Kho_Sach JOIN deleted ON Kho_Sach.MaSach = deleted.MaSach
END

Thông thường việc sử dụng Trigger Update sẽ truy vấn đến cả hai bảng inserted và deleted. Việc này sẽ giúp dữ liệu trong hệ thống chính xác hơn, đảm bảo không bỏ qua bất cứ hành động thêm hay xóa bỏ nào.

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

Thông thường việc sử dụng Trigger Update sẽ truy vấn đến cả hai bảng inserted và deleted. Việc này sẽ giúp tài liệu trong mạng lưới hệ thống đúng mực hơn, bảo vệ không bỏ lỡ bất kỳ hành vi thêm hay xóa bỏ nào .Nếu Trigger tiện nghi như vậy thì liệu cơ sở tài liệu nào cũng nên dùng hay không ? Do có bảng Inserted và Deleted nên ứng dụng của nó chính là chống việc xóa những tài liệu quan trọng. Tuy nhiên so với những thủ tục tàng trữ và câu lệnh khác Trigger tất yếu cũng có sự hạn chế. Thông thường mọi người chỉ dùng cho những hành vi Update, Insert và Delete .

Ngoài ra, do khả năng chạy ngầm nên nhiều Trigger khiến hệ thống chậm lại. Và nó cũng không thể thay thế hoàn toàn các tác vụ khác trên cơ sở dữ liệu. Tuy nhiên người dùng có thể dùng Trigger như một cách để kiểm tra sự ràng buộc của dữ liệu.

Tổng kết

Trên đây là các thông tin về SQL Trigger mà chúng tôi muốn gửi tới bạn. Sử dụng trình kích hoạt này mang đến những điểm tiện lợi cho nhiều hệ thống. Tuy nhiên tùy theo mục đích mà viết Trigger phù hợp với các tác vụ gây thay đổi trên cơ sở dữ liệu.

Nếu còn gặp bất kể vướng mắc gì về Trigger trong SQL, hãy để lại ở bên phản hồi bên dưới, BKHOST sẽ vấn đáp bạn trong thời hạn sớm nhất .P. / s : Bạn cũng hoàn toàn có thể truy vấn vào Blog của BKHOST để đọc thêm những bài viết san sẻ kỹ năng và kiến thức về lập trình, quản trị mạng, website, domain, hosting, vps, server, email, … Chúc bạn thành công xuất sắc .

  • trigger trong sql là gì
  • trigger sql server
  • trigger sql là gì
  • triggers in sql