このストアドプロシージャがあります。たとえば、5秒間隔でこれを実行するにはどうすればよいですか? 1日以上前のタイムスタンプを持つデータを削除するルーチンのように?
DROP PROCEDURE IF EXISTS `delete_rows_links`
GO
CREATE PROCEDURE delete_rows_links
BEGIN
DELETE activation_link
FROM activation_link_password_reset
WHERE TIMESTAMPDIFF(DAY, `time`, NOW()) < 1 ;
END
GO
Mysqlスケジューラを使用して、5秒ごとに実行できます。サンプルは http://dev.mysql.com/doc/refman/5.1/en/create-event.html にあります。
使用したことはありませんが、これが機能することを願っています。
CREATE EVENT myevent
ON SCHEDULE EVERY 5 SECOND
DO
CALL delete_rows_links();
私はこのクエリを使用し、それは私のために働いた:
CREATE EVENT `exec`
ON SCHEDULE EVERY 5 SECOND
STARTS '2013-02-10 00:00:00'
ENDS '2015-02-28 00:00:00'
ON COMPLETION NOT PRESERVE ENABLE
DO
call delete_rows_links();
Cronjobを作成するには、次の手順を実行します。
次のコマンドを実行します。SET GLOBAL event_scheduler = ON;
エラー1229(HY000)の場合:変数 'event_scheduler'はGLOBAL変数であり、SET GLOBAL:mportantで設定する必要があります
サーバーの起動時にのみ、イベントスケジューラを無効に設定できます。 event_schedulerがONまたはOFFの場合、実行時にDISABLEDに設定できません。また、起動時にイベントスケジューラが無効に設定されている場合、実行時にevent_schedulerの値を変更することはできません。
イベントスケジューラを無効にするには、次の2つの方法のいずれかを使用します。
サーバーを起動する際のコマンドラインオプションとして:
--event-scheduler=DISABLED
サーバー構成ファイル(my.cnf、またはWindowsシステムのmy.ini)に、サーバーによって読み取られる行を含めます(たとえば、[mysqld]セクションに)。
event_scheduler=DISABLED
詳細については、MySQL ドキュメント を参照してください。
DROP EVENT IF EXISTS EVENT_NAME;
CREATE EVENT EVENT_NAME
ON SCHEDULE EVERY 10 SECOND/minute/hour
DO
CALL PROCEDURE_NAME();
DB以外のソリューションを利用できる場合:プロシージャを呼び出すスクリプトを実行するcronジョブをセットアップできます。