Mysql事件更新和搜索

时间:2012-04-26 21:08:56

标签: mysql mysql-management

我有一个演示数据库,我需要在userid ='1'的任何表中每晚将状态设置为0

是否可以在mySql事件调度程序中执行此操作?或者我是否需要单独指定每个查询?

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

1 个答案:

答案 0 :(得分: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;