Trong bài này chúng ta sẽ học cách sử dụng INSTEAD OF trigger trong SQL Server, đây là tính năng cho phép bạn bỏ qua câu lệnh SQL INSERT, UPDATE hoặc DELETE.
Mục lục
- 1. INSTEAD OF trigger là gì?
- 2. Ví dụ INSTEAD OF trigger
- Bước 1: Tạo bảng brand_approvals
- Bước 2: Tạo View vw_brands
- Bước 3: Tạo trigger
1. INSTEAD OF trigger là gì?
INSTEAD OF trigger là một loại trigger đặc biệt, nó cho phép bạn bỏ qua câu lệnh INSERT, UPDATE hoặc DELETE trên một table hoặc view. Ví dụ bạn muốn khi có hành động delete trên table product thì bạn không xóa sản phẩm mà sẽ chạy một câu lệnh UPDATE status của product đó sang chế độ ẩn. Mặc dù bạn có thể không sử dung lệnh DELETE mà UPDATE trực tiếp cũng được, tuy nhiên để đảm bảo mọi câu truy vấn đều đúng thì nên sử dụng trigger.
Cú pháp của nó cũng không khá gì trigger:
1 2 3 4 5 6 7 | CREATE TRIGGER [schema_name.] trigger_name ON {table_name | view_name } INSTEAD OF {[ INSERT ] [,] [ UPDATE ] [,] [ DELETE ] } AS BEGIN {sql_statements} END |
Mình sẽ không giải thích các tham số nữa vì bạn đã học nó rồi. Bây giờ ta sẽ thực hành một ví dụ để bạn dễ hiểu hơn.
2. Ví dụ INSTEAD OF trigger
Trong ví dụ này sử dụng database mẫu.
Một ví dụ điển hình của trigger đó là ghi đè dữ liệu của các thao tác insert, update, or delete trên view.
Giả sử một ứng dụng cần thêm một thương hiệu mới vào trong bảng brands
, tuy nhiên các thương hiệu mới thì nên lưu trữ ở một bảng khác tên là brand_approvals
để được phê duyệt, sau khi phê duyệt xong thì sẽ thêm nó vào bảng brands
.
Để thực hiện điều này thì ta sẽ tạo một view tên là vw_brands
để các ứng dụng thêm dữ liệu mới, nếu thương hiệu được thêm vào view thì INSTEAD OF trigger sẽ được kích hoạt và chèn vào bảng brand_approvals
.
Hình ảnh sau đây minh họa quá trình này:
Các bước thực hiện như sau:
Bước 1: Tạo bảng brand_approvals
Hãy sử dụng câu lệnh SQL dưới đây để tạo bảng brand_approvals
, bảng này sẽ lưu trữ các thương hiệu chưa được phê duyệt.
1 2 3 4 | CREATE TABLE production.brand_approvals( brand_id INT IDENTITY PRIMARY KEY , brand_name VARCHAR (255) NOT NULL ); |
Bước 2: Tạo View vw_brands
Bây giờ bạn hãy tạo view tên là vw_brands
bằng câu SQL sau.
1 2 3 4 5 6 7 8 9 10 11 12 13 | CREATE VIEW production.vw_brands AS SELECT brand_name, 'Approved' approval_status FROM production.brands UNION SELECT brand_name, 'Pending Approval' approval_status FROM production.brand_approvals; |
Dữ liệu ban dầu của view chính là dữ liệu của cả hai bảng brands
và brand_approvals
.
Như vậy chúng ta sẽ có ba cách dùng:
- Nếu muốn lấy tất cả thương hiệu thì lấy trong view
vw_brands
- Nếu muốn lấy thương hiệu đã được phê duyệt thì lấy trong bảng
brands
- Nếu muốn lấy thương hiệu chưa phê duyệt thì lấy trong bảng
brand_approvals
Thực tế bạn có thể không sử dụng cách này mà thêm một fỉed status vào table brands, như vậy sẽ đơn giản hơn rất nhiều. Tuy nhiên vì các bạn đang học nên hãy tham khảo ví dụ này.
Bước 3: Tạo trigger
Ta sẽ cần một trigger gán vào view vw_brands
, mỗi khi có thao tác insert vào view thì sẽ insert nó vào table brand_approvals
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | CREATE TRIGGER production.trg_vw_brands ON production.vw_brands INSTEAD OF INSERT AS BEGIN SET NOCOUNT ON ; INSERT INTO production.brand_approvals ( brand_name ) SELECT i.brand_name FROM inserted i WHERE i.brand_name NOT IN ( SELECT brand_name FROM production.brands ); END |
Bây giờ bạn hãy thử thêm một dòng dữ liệu vào view xem sao nhé.
1 2 | INSERT INTO production.vw_brands(brand_name) VALUES ( 'Eddy Merckx' ); |
Chạy câu truy vấn sau để xem dữ liệu hiện có trong view.
1 2 3 4 5 | SELECT brand_name, approval_status FROM production.vw_brands; |
Hãy xem dữ liệu trong bảng brand_approvals.
1 2 3 4 | SELECT * FROM production.brand_approvals; |
Như vậy trong bài này đã giới thiệu với các bạn cách sử dụng INSTEAD OF trigger trong SQL Server, đây là một chức năng rất hay và giúp các nhà thiết kế database có nhiều tùy chọn hơn trong việc phân tích mô hình CSDL.
* KHOÁ HỌC ORACLE DATABASE A-Z ENTERPRISE trực tiếp từ tôi giúp bạn bước đầu trở thành những chuyên gia DBA, đủ kinh nghiệm đi thi chứng chỉ OA/OCP, đặc biệt là rất nhiều kinh nghiệm, bí kíp thực chiến trên các hệ thống Core tại VN chỉ sau 1 khoá học.
* CÁCH ĐĂNG KÝ: Gõ (.) hoặc để lại số điện thoại hoặc inbox https://m.me/tranvanbinh.vn hoặc Hotline/Zalo 090.29.12.888
* Chi tiết tham khảo:
https://bit.ly/oaz_w
=============================
KẾT NỐI VỚI CHUYÊN GIA TRẦN VĂN BÌNH:
📧 Mail: binhoracle@gmail.com
☎️ Mobile/Zalo: 0902912888
👨 Facebook: https://www.facebook.com/BinhOracleMaster
👨 Inbox Messenger: https://m.me/101036604657441 (profile)
👨 Fanpage: https://www.facebook.com/tranvanbinh.vn
👨 Inbox Fanpage: https://m.me/tranvanbinh.vn
👨👩 Group FB: https://www.facebook.com/groups/DBAVietNam
👨 Website: https://www.tranvanbinh.vn
👨 Blogger: https://tranvanbinhmaster.blogspot.com
🎬 Youtube: https://www.youtube.com/@binhguru
👨 Tiktok: https://www.tiktok.com/@binhguru
👨 Linkin: https://www.linkedin.com/in/binhoracle
👨 Twitter: https://twitter.com/binhguru
👨 Podcast: https://www.podbean.com/pu/pbblog-eskre-5f82d6
👨 Địa chỉ: Tòa nhà Sun Square - 21 Lê Đức Thọ - Phường Mỹ Đình 1 - Quận Nam Từ Liêm - TP.Hà Nội
=============================
oracle tutorial, học oracle database, Tự học Oracle, Tài liệu Oracle 12c tiếng Việt, Hướng dẫn sử dụng Oracle Database, Oracle SQL cơ bản, Oracle SQL là gì, Khóa học Oracle Hà Nội, Học chứng chỉ Oracle ở đầu, Khóa học Oracle online,sql tutorial, khóa học pl/sql tutorial, học dba, học dba ở việt nam, khóa học dba, khóa học dba sql, tài liệu học dba oracle, Khóa học Oracle online, học oracle sql, học oracle ở đâu tphcm, học oracle bắt đầu từ đâu, học oracle ở hà nội, oracle database tutorial, oracle database 12c, oracle database là gì, oracle database 11g, oracle download, oracle database 19c, oracle dba tutorial, oracle tunning, sql tunning , oracle 12c, oracle multitenant, Container Databases (CDB), Pluggable Databases (PDB), oracle cloud, oracle security, oracle fga, audit_trail,oracle RAC, ASM, oracle dataguard, oracle goldengate, mview, oracle exadata, oracle oca, oracle ocp, oracle ocm , oracle weblogic, postgresql tutorial, mysql tutorial, mariadb tutorial, ms sql server tutorial, nosql, mongodb tutorial, oci, cloud, middleware tutorial, hoc solaris tutorial, hoc linux tutorial, hoc aix tutorial, unix tutorial, securecrt, xshell, mobaxterm, putty