Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Khi một hàng mới trong cơ sở dữ liệu được thêm vào, một chương trình dòng lệnh bên ngoài phải được gọi

Chad Birch có một ý tưởng hay với việc sử dụng Trình kích hoạt MySQL và một hàm do người dùng xác định . Bạn có thể tìm hiểu thêm trong Cú pháp TẠO TRIGGER của MySQL tham khảo.

Nhưng bạn có chắc chắn rằng bạn cần gọi một tệp thực thi ngay lập tức khi hàng được chèn vào không? Có vẻ như phương pháp đó sẽ dễ bị thất bại, vì MySQL có thể tạo ra nhiều trường hợp thực thi cùng một lúc. Nếu tệp thực thi của bạn không thành công, thì sẽ không có bản ghi nào về hàng nào đã được xử lý và hàng nào chưa được xử lý. Nếu MySQL đang đợi tệp thực thi của bạn kết thúc, thì việc chèn các hàng có thể rất chậm. Ngoài ra, nếu Chad Birch đúng, thì sẽ phải biên dịch lại MySQL, vì vậy nghe có vẻ khó khăn.

Thay vì gọi tệp thực thi trực tiếp từ MySQL, tôi sẽ sử dụng trình kích hoạt để đơn giản ghi lại thực tế là một hàng đã được CHÈN hoặc CẬP NHẬT:ghi lại thông tin đó trong cơ sở dữ liệu, với các cột mới trong bảng hiện có của bạn hoặc với một bảng hoàn toàn mới được gọi là say database_changes . Sau đó, tạo một chương trình bên ngoài thường xuyên đọc thông tin từ cơ sở dữ liệu, xử lý và đánh dấu thông tin đó là xong.

Giải pháp cụ thể của bạn sẽ phụ thuộc vào những thông số mà chương trình bên ngoài thực sự cần.

Nếu chương trình bên ngoài của bạn cần biết hàng nào đã được chèn, thì giải pháp của bạn có thể như sau:Tạo một bảng mới có tên database_changes với các trường date , table_namerow_id và đối với tất cả các bảng khác, hãy tạo một trình kích hoạt như sau:

CREATE TRIGGER `my_trigger`
AFTER INSERT ON `table_name`
FOR EACH ROW BEGIN
  INSERT INTO `database_changes` (`date`, `table_name`, `row_id`)
  VALUES (NOW(), "table_name", NEW.id)
END;

Sau đó, tập lệnh hàng loạt của bạn có thể làm điều gì đó như sau:

  1. Chọn hàng đầu tiên trong bảng database_changes.
  2. Xử lý nó.
  3. Xóa nó.
  4. Lặp lại 1-3 cho đến khi database_changes trống.

Với cách tiếp cận này, bạn có thể kiểm soát nhiều hơn thời gian và cách thức dữ liệu được xử lý và bạn có thể dễ dàng kiểm tra xem dữ liệu có thực sự được xử lý hay không (chỉ cần kiểm tra xem database_changes bảng trống).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách tốt nhất để xây dựng một công cụ tìm kiếm SMART mySQL &PHP?

  2. Thứ tự Zend_Db theo trường Giá trị

  3. Chèn dữ liệu tiếng Ả Rập vào cơ sở dữ liệu mysql

  4. Cách sao chép cơ sở dữ liệu MySQL trên cùng một máy chủ

  5. Hive 2.1.1 MetaException (thông báo:Không tìm thấy thông tin phiên bản trong hệ thống di căn.)