MySQL - CREATE TRIGGER: Hướng dẫn dành cho người mới bắt đầu
Xin chào các bạn yêu thích cơ sở dữ liệu! Hôm nay, chúng ta sẽ cùng khám phá thế giới kỳ diệu của các trigger trong MySQL. Đừng lo lắng nếu bạn mới bắt đầu học lập trình; tôi sẽ là người bạn thân thiện dẫn đường cho bạn trong hành trình này. Cuối cùng của bài hướng dẫn này, bạn sẽ có thể tạo trigger như một chuyên gia!
Trigger là gì?
Trước khi chúng ta bắt đầu tạo trigger, hãy hiểu xem chúng là gì. Hãy tưởng tượng bạn có một chú chó trung thành luôn sủa khi ai đó bấm chuông cửa. Trong thế giới cơ sở dữ liệu, trigger giống như chú chó đó - nó là một phản hồi tự động đối với một sự kiện cụ thể trong cơ sở dữ liệu của bạn.
Định nghĩa
Trigger là một đối tượng cơ sở dữ liệu có tên được liên kết với một bảng và được kích hoạt tự động khi một sự kiện cụ thể xảy ra đối với bảng đó.
Tạo trigger trong MySQL
Bây giờ chúng ta đã biết trigger là gì, hãy học cách tạo chúng trong MySQL. Điều này giống như học một phép thuật mới, nhưng thay vì waive một枝仗, chúng ta sẽ gõ các lệnh!
Cú pháp cơ bản
Dưới đây là cấu trúc cơ bản của câu lệnh CREATE TRIGGER:
CREATE TRIGGER trigger_name
{BEFORE | AFTER} {INSERT | UPDATE | DELETE}
ON table_name
FOR EACH ROW
trigger_body;
Hãy phân tích nó:
-
trigger_name
: Đây là tên của trigger. Chọn một tên mô tả điều nó làm. -
{BEFORE | AFTER}
: Đây quyết định khi nào trigger kích hoạt - trước hoặc sau sự kiện được chỉ định. -
{INSERT | UPDATE | DELETE}
: Đây là sự kiện kích hoạt trigger. -
table_name
: Bảng liên quan đến trigger. -
FOR EACH ROW
: Điều này có nghĩa là trigger sẽ kích hoạt cho mỗi hàng bị ảnh hưởng bởi sự kiện. -
trigger_body
: Các câu lệnh SQL sẽ được thực thi khi trigger kích hoạt.
Ví dụ 1: Trigger trước INSERT
Hãy tạo một trigger đảm bảo rằng tất cả các tên nhân viên được viết hoa trước khi chúng được chèn vào bảng.
CREATE TRIGGER capitalize_name
BEFORE INSERT ON employees
FOR EACH ROW
SET NEW.name = UPPER(NEW.name);
Trong ví dụ này:
- Trigger được命名为
capitalize_name
. - Nó kích hoạt TRƯỚC một thao tác INSERT trên bảng
employees
. - Cho mỗi hàng mới, nó viết hoa cột
name
sử dụng hàmUPPER()
. -
NEW
tham chiếu đến hàng mới được chèn.
Ví dụ 2: Trigger sau UPDATE
Bây giờ, hãy tạo một trigger ghi lại các thay đổi lương trong một bảng riêng biệt.
CREATE TRIGGER log_salary_changes
AFTER UPDATE ON employees
FOR EACH ROW
BEGIN
IF OLD.salary <> NEW.salary THEN
INSERT INTO salary_log (employee_id, old_salary, new_salary, change_date)
VALUES (NEW.id, OLD.salary, NEW.salary, NOW());
END IF;
END;
Đây là những gì đang xảy ra:
- Trigger được命名为
log_salary_changes
. - Nó kích hoạt SAU một thao tác UPDATE trên bảng
employees
. - Nó kiểm tra xem lương có thay đổi (
OLD.salary <> NEW.salary
). - Nếu có thay đổi, nó chèn một bản ghi vào bảng
salary_log
. -
OLD
tham chiếu đến hàng trước khi cập nhật, vàNEW
tham chiếu đến hàng sau khi cập nhật.
Tạo trigger bằng chương trình khách
Trong khi chúng ta có thể tạo trigger trực tiếp trong MySQL, đôi khi việc sử dụng một chương trình khách tiện lợi hơn. Hãy xem cách chúng ta có thể làm điều này bằng cách sử dụng client-line client của MySQL.
Bước 1: Kết nối đến MySQL
Đầu tiên, mở terminal hoặc command prompt và kết nối đến MySQL:
mysql -u username -p
Thay thế username
bằng tên người dùng MySQL của bạn. Bạn sẽ được yêu cầu nhập mật khẩu.
Bước 2: Chọn cơ sở dữ liệu
Sau khi kết nối, chọn cơ sở dữ liệu bạn muốn làm việc:
USE your_database_name;
Bước 3: Tạo trigger
Bây giờ, bạn có thể tạo trigger. Hãy sử dụng ví dụ ghi lại thay đổi lương:
DELIMITER //
CREATE TRIGGER log_salary_changes
AFTER UPDATE ON employees
FOR EACH ROW
BEGIN
IF OLD.salary <> NEW.salary THEN
INSERT INTO salary_log (employee_id, old_salary, new_salary, change_date)
VALUES (NEW.id, OLD.salary, NEW.salary, NOW());
END IF;
END//
DELIMITER ;
Lưu ý việc sử dụng DELIMITER //
và DELIMITER ;
. Điều này là vì thân trigger của chúng ta chứa các dấu phẩy động, vì vậy chúng ta cần thay đổi delimiters tạm thời.
Bước 4: Kiểm tra trigger
Để chắc chắn rằng trigger của bạn đã được tạo thành công, bạn có thể sử dụng:
SHOW TRIGGERS;
Lệnh này sẽ hiển thị tất cả các trigger trong cơ sở dữ liệu hiện tại.
Các phương pháp trigger
Dưới đây là bảng các phương pháp trigger phổ biến nhất trong MySQL:
Phương pháp | Mô tả |
---|---|
BEFORE INSERT | Kích hoạt trước khi một hàng mới được chèn |
AFTER INSERT | Kích hoạt sau khi một hàng mới được chèn |
BEFORE UPDATE | Kích hoạt trước khi một hàng hiện có được cập nhật |
AFTER UPDATE | Kích hoạt sau khi một hàng hiện có được cập nhật |
BEFORE DELETE | Kích hoạt trước khi một hàng hiện có được xóa |
AFTER DELETE | Kích hoạt sau khi một hàng hiện có được xóa |
Nhớ rằng, mỗi phương pháp này có thể là một công cụ mạnh mẽ khi sử dụng đúng cách. Chúng có thể nâng cao hoạt động của cơ sở dữ liệu của bạn, nhưng việc lạm dụng chúng có thể dẫn đến sự phức tạp và vấn đề hiệu suất.
Kết luận
Chúc mừng! Bạn đã chính thức bước vào thế giới của các trigger trong MySQL. Chúng ta đã bao gồm trigger là gì, cách tạo chúng và thậm chí cách sử dụng chúng với một chương trình khách. Nhớ rằng, như bất kỳ công cụ mạnh mẽ nào, trigger nên được sử dụng một cách khôn ngoan. Chúng có thể làm cho các hoạt động cơ sở dữ liệu của bạn trở nên tuyệt vời, nhưng việc sử dụng quá mức có thể dẫn đến sự phức tạp và vấn đề hiệu suất.
Trong hành trình MySQL của bạn, tiếp tục thực hành và thử nghiệm với các trigger. Nhanh chóng, bạn sẽ có thể tạo ra các hiệu ứng kỳ diệu với cơ sở dữ liệu mà ngay cả Merlin cũng phải ghen tị! Chúc bạn may mắn và các truy vấn của bạn luôn trả về kết quả như mong đợi!
Credits: Image by storyset