mysql - 当我的 MySQL 表更新时,我如何收到电子邮件?

标签 mysql insert sql-update

您好,我想知道 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 ;

从那时起,您需要做的就是在服务器上运行一个 crontab(比如每分钟一次),它从 notification 表中选择 sent = 0,发送通知并设置 sent = 1

据我所知,这是在不读取 bin 日志的情况下从数据库中获取信息的最佳方式。

如果您需要使用 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

关于mysql - 当我的 MySQL 表更新时,我如何收到电子邮件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18706790/

相关文章:

sql - 在列名旁边编写带有值的 INSERT 语句?

MySQL :- insert data in two difference database

postgresql - 如何手动锁定和解锁一行?

sql - 每天运行一个 Oracle SQL 更新脚本

mysql - mysql 是否可以在一个查询中执行多个解释?

mysql - 如何有选择地计算记录并在mysql中按日期分组?

t-sql - 如果不存在则插入记录 SQL Server 2005

MySQL 与 MariaDB - 相同的更新...在 MariaDB 中选择失败

mysql - MySQL中如何将列名转移到结果集?

mysql - 连接docker容器和mysql