Thứ Tư, 26 tháng 7, 2023

After Delete Trigger trong MySQL

Trong bài này bạn sẽ được học After Delete Trigger trong MySQL, đây là loại trigger xảy ra khi bạn thực hiện lệnh delete, và nó sẽ chạy sau khi hệ thống chạy lênh delete đó thành công.

Mục lục

  • 1. Giới thiệu After Delete Trigger trong MySQL
  • 2. Vi dụ After Delete Trigger trong MySQL
    • Tạo table
    • Tạo trigger
    • Chạy thử trigger

1. Giới thiệu After Delete Trigger trong MySQL

Về công dụng thì nó giống như Before Delete, điểm khác duy nhất là nó hoạt động sau khi lệnh delete hoàn thành, còn before delete thì nó hoạt động trước khi lệnh delete thục hiện.

Cú pháp như sau:

1
2
3
4
CREATE TRIGGER trigger_name
    AFTER DELETE
    ON table_name FOR EACH ROW
trigger_body;

Trong đó trigger_name là tên của trigger, table_name chính là tên của table mà bạn muốn trigger này gắn vào.

Bài viết này được đăng tại [tranvanbinh.vn]

Nếu bạn có nhiều dòng SQL bên trong phần trigger_body thì hãy đặt nó trong cặp BEGIN .. END.

1
2
3
4
5
6
7
8
9
10
DELIMITER $$
 
CREATE TRIGGER trigger_name
    AFTER DELETE
    ON table_name FOR EACH ROW
BEGIN
    -- statements
END$$   
 
DELIMITER ;

Tương tự như Before Trigger, bạn có thể truy xuất đến giá trị của OLD nhưng không thể thay đổi chúng. Riêng NEW thì không có bởi vi đây là lệnh delete.

MySQL AFTER DELETE Trigger png

2. Vi dụ After Delete Trigger trong MySQL

Trước tiên hãy tạo một vài table để thực hành.

Tạo table

Hãy tạo một table Salaries có cấu trúc đơn giản như sau:

1
2
3
4
5
6
DROP TABLE IF EXISTS Salaries;
 
CREATE TABLE Salaries (
    employeeNumber INT PRIMARY KEY,
    salary DECIMAL(10,2) NOT NULL DEFAULT 0
);

Nó chỉ có 2 field như sau:

  • employeeNumber là mã số nhân viên
  • salary là mức lương của nhân viên

Hãy thêm một vài dòng dữ liệu.

1
2
3
4
5
INSERT INTO Salaries(employeeNumber,salary)
VALUES
    (1002,5000),
    (1056,7000),
    (1076,8000);

Bây giờ tạo thêm một table SalaryBudgets dùng để lưu trữ tổng số lương của tất cả nhân viên.

1
2
3
INSERT INTO SalaryBudgets(total)
SELECT SUM(salary)
FROM Salaries;

Đúng ra ta sẽ tạo After Insert Trigger để bắt sự kiện khi thêm nhân viên thì update tổng số mức lương trong bảng SalaryBudgets, hoặc After Update Trigger cho trường hợp bạn chỉnh mức lương. Vì để bài toán đơn giản hơn nên mình sẽ thêm thủ công như sau:

1
2
3
INSERT INTO SalaryBudgets(total)
SELECT SUM(salary)
FROM Salaries;

Thử truy vấn xem tổng số lương là bao nhiêu nhé. Nếu đúng ra thì sẽ là 5000 + 7000 + 8000 = 20000.

1
SELECT * FROM SalaryBudgets;

MySQL AFTER DELETE Trigger Example png

Quá chuẩn!

Tạo trigger

Mình sẽ viết trigger khi xóa một nhân viên trong bảng Salaries thì update tổng số mức lương ở bảng SalaryBudgets.

1
2
3
4
5
CREATE TRIGGER after_salaries_delete
AFTER DELETE
ON Salaries FOR EACH ROW
UPDATE SalaryBudgets
SET total = total - old.salary;

Rất đơn giản nên mình không giải thích thêm nhé.

Chạy thử trigger

Trước tiên hãy thử xóa một nhân viên có id = 1002 xem thế nào nhé.

1
2
DELETE FROM Salaries
WHERE employeeNumber = 1002;

Hãy xem tổng số mức lương ở bảng SalaryBudgets có được update không nhé.

1
SELECT * FROM SalaryBudgets;

MySQL AFTER DELETE Trigger Example 2 png

Kết quả 15000 là đúng rồi, tại vì nhân viên đã xóa có mức lương là 5000.

Bây giờ hãy thử xóa tất cả 2 nhân viên còn lại xem tổng số có update về 0 không nhé.

1
DELETE FROM Salaries;

Xem kết quả thế nào.

1
SELECT * FROM SalaryBudgets;   

Bạn hãy thử chạy và xem thành quả nhé, mình chắc chắn nó đã về zero rồi :)

Như vậy là mình đã hướng dẫn xong cách sử dụng After Delete Trigger trong MySQL. Hy vọng bài cuối cùng trong loạt tutorials về trigger này sẽ giúp bạn an tâm hơn về kiến thức của mình.

=============================
* 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

=============================
After Delete Trigger trong MySQL, 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

ĐỌC NHIỀU

Trần Văn Bình - Oracle Database Master