CodeGym /Các khóa học /SQL SELF /Làm quen với trigger

Làm quen với trigger

SQL SELF
Mức độ , Bài học
Có sẵn

Trigger (hay trigger) là kiểu như một “callback” trong database, phản ứng lại các sự kiện nhất định. Nói cách khác, trigger là phản ứng tự động khi thực hiện các thao tác như INSERT, UPDATE hoặc DELETE trong các bảng.

Hãy tưởng tượng bạn có một trợ lý thông minh, người sẽ làm việc thay bạn. Ví dụ, mỗi lần bạn thêm một bản ghi sinh viên mới, trợ lý sẽ tự động cập nhật trường ngày sửa đổi cuối cùng. Trigger trong database cũng hoạt động y chang vậy: nó “nghe” các sự kiện và chạy phản ứng đã lập trình sẵn.

Trigger kết hợp hai thứ:

  1. Sự kiện: có gì đó xảy ra trong bảng (ví dụ, thêm bản ghi).
  2. Hàm trigger: đoạn code sẽ chạy khi sự kiện xảy ra.
Quan trọng:

trigger không thể tồn tại nếu không gắn với một hàm. Hàm sẽ quyết định chính xác phải làm gì khi trigger được kích hoạt.

Ví dụ sử dụng trigger

Cùng xem vài tình huống mà trigger có thể hữu ích nhé.

  1. Tự động cập nhật dữ liệu

Bạn muốn trong bảng lưu thông tin sinh viên có trường last_modified sẽ tự động cập nhật mỗi lần bản ghi bị thay đổi. Thay vì phải tự tay update trường này, bạn có thể tạo trigger để nó làm hộ bạn.

  1. Ghi log thay đổi

Bạn muốn theo dõi ai và khi nào thay đổi dữ liệu trong bảng. Trigger có thể tự động thêm bản ghi vào bảng audit (log) mỗi khi dữ liệu bị thay đổi.

  1. Kiểm tra dữ liệu hợp lệ

Nếu dữ liệu thêm vào bảng phải tuân theo một số quy tắc nhất định (ví dụ, tuổi sinh viên phải lớn hơn 18), trigger có thể kiểm tra dữ liệu trước khi chèn vào.

  1. Tự động tính toán

Trong bảng orders bạn lưu các đơn hàng, và mỗi lần thêm đơn mới thì cần cập nhật tổng số tiền mua của khách. Thay vì làm thủ công, trigger có thể tự động update tổng tiền.

Khi nào nên dùng trigger

Giờ khi đã biết trigger làm được gì, cùng bàn xem khi nào thực sự nên dùng nó nhé.

Ghi log và audit: trigger cực kỳ hợp để tạo bản ghi audit, giúp theo dõi thay đổi trong các bảng quan trọng.

Đảm bảo tính toàn vẹn dữ liệu: ví dụ, nếu bạn xóa một khóa học khỏi database, trigger có thể tự động xóa luôn các sinh viên liên quan, tránh dữ liệu “treo”.

Tự động hóa các tác vụ lặp lại: các tác vụ này có thể là cập nhật giá trị tính toán, cập nhật dữ liệu tổng hợp, v.v.

Triển khai business logic trong DB: thay vì chỉ dựa vào code ứng dụng, một phần logic có thể chuyển xuống tầng database.

Ưu điểm của trigger

Chắc bạn cũng đoán được, trigger là công cụ mạnh mẽ. Đây là những gì nó mang lại:

Tự động hóa: giảm tối đa việc can thiệp thủ công. Ví dụ, tracking ai thay đổi dữ liệu sẽ tự động luôn.

Giảm lặp lại code: thay vì bắt dev viết logic update hay kiểm tra hợp lệ ở từng app, ta nhét luôn vào DB.

Đảm bảo dữ liệu chuẩn: trigger có thể là lớp bảo vệ bổ sung, giúp dữ liệu luôn đúng.

Nhược điểm của trigger

Tất nhiên, như mọi công cụ khác, trigger cũng có mặt trái. Cùng xem qua nhé:

  • Khó debug: trigger chạy “ngầm”. Nếu nó không hoạt động như mong đợi, debug sẽ khá đau đầu.

  • Có thể gây chậm hiệu năng: nếu trigger quá phức tạp hoặc bị gọi quá nhiều, nó sẽ làm chậm các truy vấn SQL.

  • Logic ẩn: khi business logic “chôn” trong trigger, dev sẽ khó hiểu chuyện gì thực sự xảy ra trong database.

Tình huống thực tế

Ví dụ 1: Ghi log thay đổi

Giả sử bạn có bảng students lưu thông tin sinh viên. Bạn muốn theo dõi các thay đổi bản ghi. Trigger sẽ thêm bản ghi vào bảng audit_log mỗi lần dữ liệu sinh viên bị thay đổi.

Ví dụ 2: Tự động cập nhật

Bảng students có cột last_modified. Bạn muốn giá trị này tự động update mỗi khi dữ liệu sinh viên thay đổi. Có thể làm điều này bằng trigger chạy sau khi update.

Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION