2017-02-24 68 views
0

這些語句如何在mysql事件中使用多個sql語句?

INSERT INTO toolate (name,type,date) 
SELECT name, type ,date 
FROM homework 
WHERE date < CURRENT_DATE() 

DELETE FROM homework WHERE date < CURRENT_DATE() 

我需要這兩個結合起來,使我的活動將在一個正確的順序工作。 首先是INSERT語句,然後是DELETE語句。

這樣,我仍然可以看到家庭作業是過去的日期,同時有一個乾淨的家庭作業表,它需要自動發生,因此爲什麼我使用事件。當然,我會歡迎不同的解決方案。

+2

這是一個非常糟糕的設計#justsaying – JohnHC

+2

@JohnHC指出,你可以離開他們原來的表你的舊記錄,以期提'日期

回答

1

您不能在一個查詢中組合這兩個。然而,另一種是使用STORED PROCEDURE與執行transaction內這兩個EXIT HANDLER如:

BEGIN 

    START TRANSACTION; 

     DECLARE EXIT HANDLER FOR SQLEXCEPTION 

     BEGIN 
      ROLLBACK; 
      EXIT PROCEDURE; 
     END; 

     INSERT INTO toolate (name,type,date) 
     SELECT name, type ,date 
     FROM homework 
     WHERE date < CURRENT_DATE() 

     DELETE FROM homework WHERE date < CURRENT_DATE() 

    COMMIT; 
END 

這將確保這兩個查詢都sequencially執行,如果DELETE查詢失敗,INSERT將回滾。

Here關於存儲過程的MtSQL文檔。

相關問題