MySQL Events: Lập lịch và Tự động hóa Tác vụ

MySQL Events cung cấp một cơ chế mạnh mẽ để tự động hóa các tác vụ định kỳ hoặc theo lịch trình trực tiếp trong cơ sở dữ liệu. Điều này rất hữu ích cho các công việc bảo trì, sao lưu, dọn dẹp dữ liệu hoặc thực thi các quy trình kinh doanh theo thời gian đã định.

Cú pháp Tạo Event

Cú pháp cơ bản để tạo một MySQL Event như sau:

CREATE EVENT [IF NOT EXISTS] ten_su_kien
ON SCHEDULE lich_trinh
[ON COMPLETION [NOT] PRESERVE]
[ENABLE | DISABLE]
[COMMENT 'chu_thich']
DO khoi_lenh_su_kien;
    
  • IF NOT EXISTS: Chỉ tạo sự kiện nếu tên sự kiện chưa tồn tại.
  • ten_su_kien: Tên duy nhất cho sự kiện.
  • lich_trinh: Xác định thời gian và tần suất thực thi sự kiện.
  • ON COMPLETION [NOT] PRESERVE: Quyết định xem sự kiện có được giữ lại sau khi hoàn thành hay không. Nếu có NOT, sự kiện sẽ bị xóa sau khi thực thi. Mặc định là giữ lại.
  • ENABLE | DISABLE: Cho phép (ENABLE) hoặc vô hiệu hóa (DiSABLE) sự kiện. Mặc định là ENABLE.
  • COMMENT 'chu_thich': Một chuỗi mô tả mục đích của sự kiện.
  • khoi_lenh_su_kien: Các câu lệnh SQL sẽ được thực thi. Có thể là một câu lệnh đơn hoặc nhiều câu lệnh được bao bọc bởi BEGIN...END. Cũng có thể gọi một stored procedure.

Các Loại Lịch Trình

Phần lich_trinh (ON SCHEDULE) cho phép định nghĩa nhiều kiểu thực thi:

  • Thực thi một lần:
    ON SCHEDULE AT 'YYYY-MM-DD HH:MM:SS'
    -- Ví dụ: Thực thi vào ngày 1 tháng 2 năm 2022 lúc 4 giờ sáng
    -- ON SCHEDULE AT '2022-02-01 04:00:00'
                
  • Thực thi định kỳ:
    ON SCHEDULE EVERY đơn_vi_thoi_gian
    -- Ví dụ: Thực thi mỗi giây
    -- ON SCHEDULE EVERY 1 SECOND
    -- ON SCHEDULE EVERY 1 MINUTE
    -- Các đơn vị khác bao gồm: HOUR, DAY, WEEK, MONTH, YEAR
                
  • Thực thi định kỳ bắt đầu từ một thời điểm nhất định:
    ON SCHEDULE EVERY đơn_vi_thoi_gian STARTS 'YYYY-MM-DD HH:MM:SS'
    -- Ví dụ: Thực thi hàng ngày lúc 8:00:00 tối, bắt đầu từ ngày 16 tháng 6 năm 2022
    -- ON SCHEDULE EVERY 1 DAY STARTS '2022-06-16 20:00:00'
                

Quản Lý Events

Để quản lý các sự kiện đã tạo, bạn có thể sử dụng các lệnh sau:

  • Liệt kê tất cả các sự kiện:
    SHOW EVENTS;
    -- Hoặc truy vấn trực tiếp bảng thông tin
    SELECT * FROM information_schema.events;
                
  • Xem chi tiết cấu trúc của một sự kiện:
    SHOW CREATE EVENT ten_su_kien;
  • Xóa một sự kiện:
    DROP EVENT ten_su_kien;
  • Sửa đổi một sự kiện:

    Bạn có thể sửa đổi sự kiện bằng cách sử dụng lệnh ALTER EVENT hoặc bằng cách xóa và tạo lại sự kiện với cấu hình mới.

    ALTER EVENT ten_su_kien
    ON SCHEDULE ...
    DO ...;
                

Ví Dụ Minh Họa

Ví dụ 1: Sao lưu dữ liệu định kỳ

Tạo một bảng sao lưu stu_bak từ bảng student. Sau đó, tạo một stored procedure student_backup_proc để chèn dữ liệu mới từ student vào stu_bak. Cuối cùng, tạo một event để gọi stored procedure này mỗi 3 giây.

-- Tạo bảng sao lưu
CREATE TABLE stu_bak SELECT * FROM student;

-- Tạo stored procedure sao lưu
DELIMITER //
CREATE PROCEDURE student_backup_proc()
BEGIN
    INSERT INTO stu_bak
    SELECT * FROM student t
    WHERE NOT EXISTS (SELECT 1 FROM stu_bak t1 WHERE t1.sno = t.sno);
    COMMIT;
END //
DELIMITER ;

-- Tạo event để gọi stored procedure mỗi 3 giây
CREATE EVENT stu_backup_event
ON SCHEDULE EVERY 3 SECOND
ON COMPLETION PRESERVE
DO CALL student_backup_proc();
    

Ví dụ 2: Xóa dữ liệu cũ

Tạo một event để tự động xóa các bản ghi trong bảng stu mà đã quá 2 phút, thực thi mỗi 5 giây.

CREATE EVENT delete_old_stu
ON SCHEDULE EVERY 5 SECOND
ON COMPLETION PRESERVE
DO
    DELETE FROM stu
    WHERE timestamp_column < (CURRENT_TIMESTAMP() - INTERVAL 2 MINUTE);
    

Thẻ: mysql Database event scheduler cron job sql automation

Đăng vào ngày 11 tháng 10 lúc 08:35