2012-04-26 63 views
0

我有一個演示數據庫,我需要每天晚上設置狀態返回到0在其中userid =「1」MySQL事件更新和搜索

是否有可能做任何表在MySQL事件調度?或者我是否需要分別指定每個查詢?

例如:更新「table」set status ='0',其中userid ='1'。

+0

這是我現在有: DELIMITER | CREATE EVENT updatedemouser1 ON SCHEDULE每1天STARTS '2012-04-26 2時○○分41秒' COMMENT '這是用於更新所有演示數據' DO BEGIN 更新table1的設置狀態= '0' 其中userid = '1'; 更新表2 set orderqty = '25'; 更新表3 set status ='0'其中userid ='1'; Update table4 set status ='0'where userid ='1'; 更新表5設置status ='0',其中userid ='1'; 更新表6 set active ='0'其中userid ='1'; END | DELIMITER; – 2012-04-26 21:25:56

+0

你真的使用字符串類型來存儲整數嗎? – eggyal 2012-04-26 21:47:29

回答

0

就我個人而言,我認爲你目前的方法是最明智的。但一些其他選項可能包括:

  • 多表UPDATE,但是你仍然需要明確地命名每個表 - 所以我不知道它的收益你多少(也許除了有點模糊)和幾乎可以肯定將有更差的性能從執行聯接:

    UPDATE 
    FROM 
         table1 
        JOIN table2 USING (userid) 
        JOIN table3 USING (userid) 
        JOIN table4 USING (userid) 
        JOIN table5 USING (userid) 
    SET 
        table1.status = '0', 
        table2.status = '0', 
        table3.status = '0', 
        table4.status = '0', 
        table5.status = '0' 
    WHERE userid = '1'; 
    
  • 動態構建您目前該系列使用預處理語句UPDATE查詢 - 但除非你經常改變你的表的數量和名稱,我不真的看不到這一點:

    SET @qry = (
        SELECT GROUP_CONCAT(
         "UPDATE `", 
         REPLACE(table_name, "`", "``"), -- in case you have strange table names 
         "` SET status='0' WHERE userid='1';" 
    ) 
        FROM INFORMATION_SCHEMA.TABLES 
        WHERE table_schema = 'db_name' 
    ); 
    
    PREPARE stmt FROM @qry; 
    EXECUTE stmt; 
    DEALLOCATE PREPARE stmt; 
    
+0

謝謝,我決定按照您的建議繼續使用指定的表格版本。您提供的代碼非常棒,所以非常感謝!我會測試速度等。看看它是否獲得了很多,但這些想法真棒。 – 2012-04-27 04:49:37