- Tổng đài 24/7: 1800 646 881
- Đăng nhập
- 3
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.
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ư:
1
. Trigger này sẽ chạy tự động khi người dùng ấn Insert thêm sách mới.Để 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.
Trong SQL, bạn sẽ gặp phải 3 loại Trigger như sau:
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ú 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:
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ó.
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:
Chúng ta sẽ giải quyết vấn đề này bằng 3 Trigger như sau:
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.
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.
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.
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.
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.
Mua Hosting WordPress tại BKHOST
Giảm giá cực sâu, chất lượng hàng đầu. Đăng ký ngay hôm nay: