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

Chèn hàng mới bằng trình kích hoạt trên cùng một bảng

Bạn sẽ không thể chèn vào cùng một bảng từ trình kích hoạt . Tôi sẽ thay thế trình kích hoạt của bạn bằng một Thủ tục và sau đó chuyển tất cả các cập nhật trạng thái thông qua quy trình:

CREATE PROCEDURE UpdateJobStatus(jobId INT, NewStatus NVARCHAR(50))
BEGIN
  UPDATE job
     SET `Status` = NewStatus 
     WHERE job_id = jobId;

  IF NewStatus = 'COMPLETED' AND jobId <=6 THEN
    INSERT INTO job(cycle_id, job_id, status) 
       SELECT cycle_id, job_id+1, 'WATING_TO_START'
       FROM job 
       WHERE job_id = jobId;
  END IF;
END;

Sql Fiddle tại đây

Mặc dù quy trình sẽ yêu cầu một số sửa đổi đối với mã của bạn (tức là bạn sẽ cần gọi quy trình thay vì cập nhật dữ liệu trực tiếp), nhưng quy trình này có lợi ích rõ ràng hơn - việc kích hoạt thực hiện mọi thứ tự động trong nền có thể không trực quan.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nhập kho mysql 8GB mất nhiều thời gian

  2. Sử dụng Docker, tôi gặp lỗi:SQLSTATE [HY000] [2002] Không có tệp hoặc thư mục nào như vậy

  3. Giá trị ngày giờ không chính xác khi thiết lập Django với MySQL

  4. tìm lý do bế tắc mysql

  5. Lỗi nghiêm trọng:Sử dụng $ this khi không ở trong ngữ cảnh đối tượng trong