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 hôm nay, hãy cùng chúng tôi tìm hiểu sâu hơn về Trigger, khi nào nên dùng chúng và những ví dụ cụ thể dễ hình dung nhất.
SQL Trigger là gì?
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 hiện một số sự kiện làm thay đổi dữ liệu trong SQL phù hợp với điều kiện thì nó sẽ kích hoạt. Trong các tình huống 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.
Để các Trigger được kích hoạt thì việc xảy ra với cơ sở dữ liệu cần đáp ứng đúng thứ tự thao tác hoặc điều kiện. Nó sẽ diễn ra một cách tự động mà bạn không cần phải làm bất cứ đ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 chủ yếu 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:
{{EJS0}}
Trong đó:
<Câu lệnh>
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,…).FOR
vàAFTER
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 nên bạ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 dễ dàng 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 dữ 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 động 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ẽ giải quyết vấn đề 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:
{{EJS1}}
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
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:
{{EJS2}}
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.
Ví dụ Trigger UPDATE
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:
{{EJS3}}
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?
Nếu Trigger tiện lợi như vậy thì liệu cơ sở dữ 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 các dữ liệu quan trọng. Tuy nhiên so với các thủ tục lưu trữ và câu lệnh khác Trigger tất nhiên cũng có sự hạn chế. Thông thường mọi người chỉ dùng cho các hành động 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 cứ vướng mắc gì về Trigger trong SQL, hãy để lại ở bên bình luận bên dưới, BKHOST sẽ trả lời bạn trong thời gian sớm nhất.
P/s: Bạn cũng có thể truy cập vào Blog của BKHOST để đọc thêm các bài viết chia sẻ 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.
- trigger trong sql là gì
- trigger sql server
- trigger sql là gì
- triggers in sql