Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak mogę otrzymać wiadomość e-mail, gdy moja tabela MySQL zostanie zaktualizowana?

Najlepszym sposobem na osiągnięcie tego byłoby użycie wyzwalacza i crona. Utwórz tabelę „kolejki powiadomień” i wypełnij ją wyzwalaczem, gdy wiersz zostanie wstawiony do żądanej tabeli.

np.

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

Następnie zdefiniuj prosty wyzwalacz:

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 ;

Od tego momentu wszystko, co musisz zrobić, to uruchomić crontab na serwerze (powiedzmy co minutę), który wybiera z notification tabela, w której sent = 0 , wyślij powiadomienie i ustaw sent = 1

O ile mi wiadomo, jest to najlepszy sposób na wyciągnięcie tych informacji z bazy danych bez czytania dzienników bin.

Jeśli potrzebujesz przykładu skryptu do uruchomienia z 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wyłączenie PDO::ATTR_EMULATE_PREPARES powoduje „nieznany” problem

  2. Jak sprawić, by zapytanie nie zwróciło nic, gdy nie ma warunków?

  3. Jak działa parametr 'LIMIT' w sql?

  4. Lista pól CodeIgniter

  5. Uzyskaj różne wartości z tablicy MySQL JSON