在我的php网站中,admin必须每周更新网站内容。如果他忘记更新数据,我想向他发送电子邮件提醒。怎么可能?是否可以从后端发送邮件。我用谷歌搜索,我得到了我们可以写触发器。但我不知道该怎么做。请帮助我。
答案 0 :(得分: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。
触发事件可以是INSERT,UPDATE和DELETE。这些事件会导致触发器被调用。只有一个事件可以调用触发器。要定义由多个事件调用的触发器,您必须定义多个触发器,每个事件对应一个触发器。
触发器必须与特定表关联。如果没有表触发器,则不需要在ON关键字后指定表名。
SQL代码放在BEGIN和END关键字之间。
OLD和NEW关键字可帮助您更有效地开发触发器。 OLD关键字在您更改数据之前引用现有记录,而在更改数据后NEW关键字引用新行。
MySQL触发示例
让我们开始在MySQL中创建一个触发器来审核employees表的更改。
首先,我们在MySQL示例数据库中有employee表,如下所示:
其次,我们创建一个名为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中创建触发器。您已经编写了一个触发器来审核employees表的更改。
答案 1 :(得分:0)
如果您的虚拟主机允许您执行预定作业,也可以在没有触发器的情况下执行此操作。您可以定期运行php脚本来检查数据库并发送电子邮件。