userid = '1'のテーブルで、毎晩ステータスを0に戻す必要があるデモデータベースがあります。
mySqlイベントスケジューラでそれを行うことは可能ですか?または、各クエリを個別に指定する必要がありますか?
たとえば、次のようになります。 "table" set status = '0' where userid='1'を更新します。
userid = '1'のテーブルで、毎晩ステータスを0に戻す必要があるデモデータベースがあります。
mySqlイベントスケジューラでそれを行うことは可能ですか?または、各クエリを個別に指定する必要がありますか?
たとえば、次のようになります。 "table" set status = '0' where 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;