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

MySQLテーブルが更新されたときに電子メールを受信するにはどうすればよいですか?

    これを実現する最良の方法は、トリガーとcronを使用することです。 「通知キュー」テーブルを作成し、目的のテーブルに行が挿入されたときにトリガーをそのテーブルに入力します。

    CREATE TABLE `notification_queue` (
      `notification_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
      `sent` tinyint(1) unsigned NOT NULL,
      PRIMARY KEY (`notification_id`)
    );
    

    次に、単純なトリガーを定義します。

    DELIMITER $$
    CREATE TRIGGER t_notification_insert 
    AFTER INSERT ON [table_being_inserted]
    FOR EACH ROW 
    BEGIN 
        INSERT INTO `notification_queue` (`sent`) VALUES (0);
    END$$
    DELIMITER ;
    

    その時点から、あなたがする必要があるのは、notificationから選択するサーバー上で(たとえば毎分)crontabを実行することです。 sent = 0のテーブル 、通知を送信し、sent = 1を設定します

    私の知る限り、これがbinログを読み取らずにDBからその情報を取得するための最良の方法です。

    cronで実行するスクリプトの例が必要な場合:

    #!/bin/bash
    
    DB_USER=''
    DB_PASS=''
    DB_NAME=''
    
    ID=`mysql -u$DB_USER -p$DB_PASS $DB_NAME -Bse "SELECT notification_id FROM notification_queue WHERE sent=0 LIMIT 1;"`
    
    if [[ ! -z $ID ]] 
    then
        # SEND MAIL HERE
        RESULT=`mysql -u$DB_USER -p$DB_PASS $DB_NAME -Bse "UPDATE notification_queue SET sent=1 WHERE notification_id = $ID;"`
        echo "Sent"
    fi
    


    1. テーブルにカンマ区切りの値を表示できません

    2. Laravel Bootstrapキャッシュ設定ファイルをクリーンアップする方法は?

    3. ドキュメントをAzureDataLakeにアップロードし、SSISを使用してデータをエクスポートします

    4. Codeigniter:ORDERBYCASEクエリでエラーが発生しました