我有一个演示数据库,我需要每晚在 userid = '1' 的任何表中将状态设置回 0
是否可以在 mySql 事件调度程序中执行此操作?还是我需要单独指定每个查询?
例如:更新“表”设置状态='0',其中用户 ID='1'。
我有一个演示数据库,我需要每晚在 userid = '1' 的任何表中将状态设置回 0
是否可以在 mySql 事件调度程序中执行此操作?还是我需要单独指定每个查询?
例如:更新“表”设置状态='0',其中用户 ID='1'。
就个人而言,我认为您目前的方法是最明智的。但其他一些选项可能包括:
一个 multi-table 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;