MySQLはトリガーを使用してデータベース内のテーブルの行制限を解決します。詳細な説明と例 最近のプロジェクト要件では、操作ログの数を 10 万件に制限しています。10 万件を超える場合は、最も古いログが削除され、データベースに保存されるログの数は 10 万件を超えません。 区切り文字 $ トリガー limitLog を作成する 前に 入れる OperationLogで 各行ごとに 始める (OperationLogからcount(*)を選択) > 100000の場合 OperationLog 制限 1 から削除します。 終了の場合; 終了$ 区切り文字 ; 問題はないようです。挿入前にチェックが行われ、10万を超えると削除が実行されます。しかし、実際のデータベースが 100,000 レコードを超えると、IF ステートメントの実行開始時に問題が発生し、MySQL はエラーを報告します。 エラー 1442 (HY000): 保存されたテーブル 'OperationLog' を更新できません 関数/トリガーは、呼び出されたステートメントによって既に使用されているため、 この保存された関数/トリガー。 情報を調べてみると、トリガーの再帰的な無限ループの実行を防ぐために、MySQL では特定のテーブルのトリガー内でテーブルに直接 DML (SELECT、DELETE、UPDATE、INSERT) 操作を実行できないようになっていることがわかりました。もちろん、他のテーブルではそのような操作を実行できます。 トリガーは、テーブルで実行できる DML 操作を制限します。トリガーは、set キーワードを使用して、実行前または実行後に実行されるデータ行を変更できます。 区切り文字 $ トリガーsetLogを作成する 前に 入れる OperationLogで 各行ごとに 始める NEW.action = 'test' を設定します。 終了$ 区切り文字 ; 上記のステートメントは、OpetationLog テーブルを挿入する前に、挿入されたデータのアクション フィールドの値がテストに更新されることを示しています。NEW は新しく追加されたフィールドを示し、OLD は削除されたときのフィールドを示します。アップデートの際はNEWとOLDを同時に使用できます。 一時的なトリガー 先ほど説明したトリガーは、特定のテーブルによって生成されたイベントに基づいてトリガーされますが、イベント スケジューラとも呼ばれる一時トリガーは、特定のタスクを実行するために特定の期間に基づいてトリガーされます。 MySQL のイベント スケジューラはタスクを 1 秒単位で正確に実行できますが、オペレーティング システムのスケジュールされたタスク (Linux の CRON や Windows のタスク スケジューリングなど) は 1 分に 1 回しか正確に実行できません。リアルタイムデータ(株価、オッズ、スコアなど)に対する要件が高いアプリケーションに非常に適しています。 この関数を使用する前に、event_schedulerが有効で実行可能であることを確認する必要があります。 グローバルイベントスケジューラ = 1; または グローバルイベントスケジューラを ON に設定します。 イベント スケジューラが現在有効になっているかどうかを確認するには、次の SQL を実行します。 'event_scheduler' のような変数を表示します。 または @@event_schedulerを選択します。 または プロセスリストを表示します。 この記事の冒頭で述べた問題に関しては、このメカニズムは完璧に解決できます。 区切り文字 $ イベント limitLog を作成し、1 秒ごとにスケジュールを設定します。DO IF (select count(*) from OperationLog) > 100000 then delete from OperationLog limit 1;END IF $ 区切り文字 ; 実証された有効性 読んでいただきありがとうございます。お役に立てれば幸いです。このサイトをサポートしていただきありがとうございます。 以下もご興味があるかもしれません:
|
<<: Nginx 仮想ホスト (IP ベース) を構成する 3 つの方法の詳細な説明
>>: Vue で親子コンポーネントの値を双方向バインドするために v-model を使用するときに発生する問題と解決策
marquee タグを使用してフォントのスクロールを設定したいです。コードは次のように記述しましたが...
CentOS 8 ではソフトウェア パッケージのインストール プログラムが変更され、yum 構成方法...
node を D ドライブにインストールしましたが、C ドライブのスペースを占有したくなかったため、...
1. はじめに最近、CentOS での開発には多くの不便があることがわかりました。Windows/M...
序文: MySQL データベースは、よく使用される集計関数、日付および文字列処理関数など、幅広い関数...
目次1. 解凍コマンド1.1 構文1.2 オプション2. 例1. 解凍コマンドunzip コマンドは...
冒頭にこう書かれています:アブソリュートは言った。「親戚よ、私はあなたを私の人生で見たくない!」なぜ...
1. Vue - 最初の vue-cli プログラムVueの開発はNodeJSに基づいています。実際...
電話Amap API を呼び出す方法は? Amap が https://lbs.amap.com/a...
Dockerfile を作成するときは、コンテナが起動する前に初期化構成やカスタム構成を実行するため...
目次序文1. 一度限りの計画タスクの紹介2. コマンド3. 1回限りのスケジュールタスクを作成する4...
MySql は、私たちが頻繁に使用するデータ ソースです。開発者が練習、小規模なプライベート ゲーム...
目次docker システム df docker システム プルーンdocker systemc 情報...
目次MySQLネイティブレプリケーションに基づくマスター-マスター同期ソリューションGaleraレプ...
目次1. 使いやすい2. 関数内でジェネリックを使用する3. クラス内でジェネリックを使用する4. ...