0

userid = '1'のテーブルで、毎晩ステータスを0に戻す必要があるデモデータベースがあります。

mySqlイベントスケジューラでそれを行うことは可能ですか?または、各クエリを個別に指定する必要がありますか?

たとえば、次のようになります。 "table" set status = '0' where userid='1'を更新します。

4

1 に答える 1

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;
    
于 2012-04-26T21:46:18.730 に答える