sql >> データベース >  >> RDS >> Mysql

データベースに新しい行を追加するときは、外部コマンドラインプログラムを呼び出す必要があります

    Chad Birchは、MySQLトリガーとユーザー定義関数 。詳細については、 MySQLCREATETRIGGER構文 参照。

    しかし、行が挿入されたらすぐに実行可能ファイルを呼び出す必要がありますか? MySQLは実行可能ファイルの複数のインスタンスを同時に生成する可能性があるため、このメソッドは失敗する傾向があるようです。実行可能ファイルに障害が発生した場合、まだ処理された行と処理されていない行の記録はありません。 MySQLが実行可能ファイルの終了を待機している場合、行の挿入は非常に遅くなる可能性があります。また、Chad Birchが正しければ、MySQLを再コンパイルする必要があるため、難しいように聞こえます。

    MySQLから直接実行可能ファイルを呼び出す代わりに、トリガーを使用して、行がINSERTEDまたはUPDATEDになったという事実を単純に記録します。既存のテーブルの新しい列またはsay <という新しいテーブルを使用して、その情報をデータベースに記録します。 code> database_changes 。次に、データベースから情報を定期的に読み取り、処理し、完了としてマークする外部プログラムを作成します。

    具体的な解決策は、外部プログラムが実際に必要とするパラメータによって異なります。

    外部プログラムが挿入された行を知る必要がある場合、ソリューションは次のようになります。 database_changesという名前の新しいテーブルを作成します。 フィールドdate table_name 、および row_id 、および他のすべてのテーブルについては、次のようなトリガーを作成します。

    CREATE TRIGGER `my_trigger`
    AFTER INSERT ON `table_name`
    FOR EACH ROW BEGIN
      INSERT INTO `database_changes` (`date`, `table_name`, `row_id`)
      VALUES (NOW(), "table_name", NEW.id)
    END;
    

    次に、バッチスクリプトは次のようなことを行うことができます:

    1. database_changesテーブルの最初の行を選択します。
    2. 処理します。
    3. 削除します。
    4. database_changes まで1〜3回繰り返します 空です。

    このアプローチを使用すると、データがいつどのように処理されるかをより細かく制御でき、データが実際に処理されたかどうかを簡単に確認できます( database_changes かどうかを確認するだけです)。 テーブルは空です。



    1. SQLServerでテーブル名の名前を変更する方法

    2. Hibernate:MySQLDialectとMySQLInnoDBDialectの違いは何ですか?

    3. どのくらいの頻度でデータベースをバックアップする必要がありますか?

    4. トップ30の最も有用な並行マネージャークエリ