Trong bài này chúng ta sẽ tìm hiểu Before Delete Trigger trong MySQL, đây là loại trigger sẽ xảy ra trước khi hệ thống thực hiện lệnh DELETE xóa dữ liệu.
Nếu bạn đã đọc những bài trước thì bài này quá đơn giản, bởi bản chất hoạt động của trigger là giống nhau, chỉ khác nhau ở sự kiện châm ngòi trigger mà thôi.
Mục lục
- .1 Giới thiệu Before Delete Trigger trong MySQL
- 2. Ví dụ Before Delete Trigger trong MySQL
- Tạo table
- Tạo trigger
- Kiểm tra trigger
.1 Giới thiệu Before Delete Trigger trong MySQL
Before Delete Trigger trong MySQL sẽ được gọi tự động thì bạn chạy câu lệnh delete, và nó sẽ thực hiện trước khi MySQL thực hiên câu lệnh delete đó.
Dưới đây là cú pháp cơ bản của nó:
Bài viết này được đăng tại [tranvanbinh.vn]
1 2 3 4 | CREATE TRIGGER trigger_name BEFORE DELETE ON table_name FOR EACH ROW trigger_body |
Trong đó trigger_name
là tên của trigger mà bạn muốn đặt, table_name
là tên của table mà bạn gắn trigger này.
Riêng trigger_body
chính là nội dung xử lý quan trọng nhất, và nếu có nhiều lệnh thì bạn sẽ đặt trong cặp BEGIN .. END
.
1 2 3 4 5 6 7 8 | DELIMITER $$ CREATE TRIGGER trigger_name BEFORE DELETE ON table_name FOR EACH ROW BEGIN -- statements END $$ |
Trong trigger này bạn có thể truy cập đến các giá trị OLD
nhưng không thể thay đổi chúng. Riêng NEW
thì không có bởi vì ta đang thực hiện câu lệnh Delete.
2. Ví dụ Before Delete Trigger trong MySQL
Hãy thực hành một ví dụ về Before Delete Trigger bạn sẽ thấy dễ hiểu hơn.
Tạo table
Đầu tiên hãy tạo table Salaries
lưu trữ thông tin lương của các nhân viên.
1 2 3 4 5 6 7 | DROP TABLE IF EXISTS Salaries; CREATE TABLE Salaries ( employeeNumber INT PRIMARY KEY , validFrom DATE NOT NULL , amount DEC (12 , 2 ) NOT NULL DEFAULT 0 ); |
Tiếp theo hãy thêm một vai dòng dữ liệu để qua phần tiếp theo kiểm thử trigger.
1 2 3 4 5 | INSERT INTO salaries(employeeNumber,validFrom,amount) VALUES (1002, '2000-01-01' ,50000), (1056, '2000-01-01' ,60000), (1076, '2000-01-01' ,70000); |
Bây giờ hãy tạo thêm bảng SalaryArchives
dùng để lưu trữ lịch sử mức lương của nhân viên đã bị xóa.
1 2 3 4 5 6 7 8 9 | DROP TABLE IF EXISTS SalaryArchives; CREATE TABLE SalaryArchives ( id INT PRIMARY KEY AUTO_INCREMENT, employeeNumber INT PRIMARY KEY , validFrom DATE NOT NULL , amount DEC (12 , 2 ) NOT NULL DEFAULT 0, deletedAt TIMESTAMP DEFAULT NOW() ); |
Tạo trigger
Chương trình Trigger dưới đây sẽ thêm một dòng cần xóa vào bảng SalaryArchives
.
1 2 3 4 5 6 7 8 9 10 11 | DELIMITER $$ CREATE TRIGGER before_salaries_delete BEFORE DELETE ON salaries FOR EACH ROW BEGIN INSERT INTO SalaryArchives(employeeNumber,validFrom,amount) VALUES (OLD.employeeNumber,OLD.validFrom,OLD.amount); END $$ DELIMITER ; |
Tên của trigger là before_salaries_delete
, dòng BEFORE DELETE cho thấy đây là loại Before Delete Trigger. Dòng ON salaries
khai báo trigger sẽ hoạt động trên table này.
Kiểm tra trigger
Ta hãy chạy một câu lệnh delete để xem có dòng nào được tự động thêm trong bảng SalaryArchives
không nhé.
1 2 | DELETE FROM salaries WHERE employeeNumber = 1002; |
Hãy chạy câu Select để xem dữ liệu thế nào.
1 | SELECT * FROM SalaryArchives; |
Trigger before_salaries_delete
đã tự động gọi nên nhân viên có ID là 1002 được thêm vào bảng này.
Bây giò ta hãy xóa hai dòng còn lại bằng cách chạy câu SQL Delete tất cả.
1 | DELETE FROM salaries; |
Nếu như trigger hoạt động ổn định thì sẽ xuất hiện thêm 2 dòng nữa trong bảng SalaryArchives. Cùng xem kết quả thế nào nhé.
1 | SELECT * FROM SalaryArchives; |
Trigger đã hoạt động thêm hai lần vì lệnh Delete ở trên đã thực hiện xóa 2 lần.
Như vậy là mình đã hướng dẫn xong cách sử dụng Before Delete Trigger trong MySQL, hy vọng bạn hiểu loại trigger này. Bài tiếp theo ta sẽ học về After Delete.
* 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