1

在我的 php 站点管理员必须每周更新站点中的内容。如果他忘记更新数据,我想向他发送电子邮件提醒。怎么可能?是否可以从后端发送邮件。我用谷歌搜索,我知道我们可以写触发器。但我不知道该怎么做。任何人请帮助我。

4

2 回答 2

3

MySQL 触发器语法

为了创建触发器,您使用 CREATE TRIGGER 语句。下面说明了 CREATE TRIGGER 语句的语法:

CREATE TRIGGER trigger_name trigger_time trigger_event
 ON table_name
 FOR EACH ROW
 BEGIN
 ...
 END

让我们更详细地检查上面的语法。

您将触发器名称放在 CREATE TRIGGER 语句之后。触发器名称应遵循命名约定 [触发时间] [表名] [触发事件],例如 before_employees_update。

触发器激活时间可以是 BEFORE 或 AFTER。定义触发器时必须指定激活时间。如果要在对表进行更改之前处理操作,则使用 BEFORE 关键字,如果需要在更改后处理操作,则使用 AFTER。

触发事件可以是 INSERT、UPDATE 和 DELETE。这些事件导致触发器被调用。一个触发器只能由一个事件调用。要定义由多个事件调用的触发器,您必须定义多个触发器,每个事件一个触发器。

触发器必须与特定表相关联。没有表触发器将不存在,因此您必须在 ON 关键字之后指定表名。

SQL 代码位于 BEGIN 和 END 关键字之间。

OLD 和 NEW 关键字可帮助您更有效地开发触发器。OLD 关键字是指更改数据之前的现有记录,NEW 关键字是指更改数据后的新行。

MySQL 触发器示例

让我们开始在 MySQL 中创建一个触发器来审计employees 表的更改。

首先,我们的 MySQL 示例数据库中有employees 表,如下所示:

在此处输入图像描述

其次,我们创建一个名为 employees_audit 的新表来保存员工记录的更改。以下脚本创建employee_audit 表。

CREATE TABLE employees_audit (
   id int(11) NOT NULL AUTO_INCREMENT,
   employeeNumber int(11) NOT NULL,
   lastname varchar(50) NOT NULL,
   changedon datetime DEFAULT NULL,
   action varchar(50) DEFAULT NULL,
   PRIMARY KEY (id)
)

第三,我们创建在对员工记录进行更改之前调用的 BEFORE UPDATE 触发器。

DELIMITER $$
CREATE TRIGGER before_employee_update
    BEFORE UPDATE ON employees
    FOR EACH ROW BEGIN

    INSERT INTO employees_audit
    SET action = 'update',
        employeeNumber = OLD.employeeNumber,
        lastname = OLD.lastname,
        changedon = NOW();
END$$
DELIMITER ;

如果您查看架构,您将看到employees 表下的 before_employee_update 触发器,如下所示:

在此处输入图像描述

现在是时候更新员工记录以测试触发器是否真的被调用了。

UPDATE employees
SET lastName = 'Phan'
WHERE employeeNumber = 1056

要检查触发器是否被 UPDATE 语句调用,我们可以使用以下查询来查询 employees_audit 表:

SELECT *
FROM employees_audit

以下是查询的输出:

在此处输入图像描述

如您所见,我们的触发器确实被调用了,因此我们在employees_audit 表中有一条新记录。

在本教程中,您学习了如何在 MySQL 中创建触发器。您已经编写了一个触发器来审计员工表的更改。

于 2013-03-16T11:48:08.857 回答
0

如果您的虚拟主机允许您执行预定的作业,您也可以在没有触发器的情况下执行此操作。您可以定期运行一个 php 脚本来检查数据库并发送电子邮件。

于 2013-03-16T11:35:19.343 回答