我有一個演示數據庫,我需要每天晚上設置狀態返回到0在其中userid =「1」MySQL事件更新和搜索
是否有可能做任何表在MySQL事件調度?或者我是否需要分別指定每個查詢?
例如:更新「table」set status ='0',其中userid ='1'。
我有一個演示數據庫,我需要每天晚上設置狀態返回到0在其中userid =「1」MySQL事件更新和搜索
是否有可能做任何表在MySQL事件調度?或者我是否需要分別指定每個查詢?
例如:更新「table」set status ='0',其中userid ='1'。
就我個人而言,我認爲你目前的方法是最明智的。但一些其他選項可能包括:
多表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;
謝謝,我決定按照您的建議繼續使用指定的表格版本。您提供的代碼非常棒,所以非常感謝!我會測試速度等。看看它是否獲得了很多,但這些想法真棒。 – 2012-04-27 04:49:37
這是我現在有: 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
你真的使用字符串類型來存儲整數嗎? – eggyal 2012-04-26 21:47:29