在实际开发中,我们经常会遇到这样的情况:有 2 个或者多个相互关联的表,如 商品信息 和 库存信息 分
别存放在 2 个不同的数据表中,我们在添加一条新商品记录的时候,为了保证数据的完整性,必须同时
在库存表中添加一条库存记录。
这样一来,我们就必须把这两个关联的操作步骤写到程序里面,而且要用 事务 包裹起来,确保这两个操
作成为一个 原子操作 ,要么全部执行,要么全部不执行。
如果我现在不想使用事务怎么办????
MySQL 从 5.0.2 版本开始支持触发器。 MySQL 的触发器和存储过程一样,都是嵌入到 MySQL 服务器的一 段程序
触发器是由 事件来触发 某个操作,这些事件包括 INSERT 、 UPDATE 、 DELETE 事件。所谓事件就是指
用户的动作或者触发某项行为。如果定义了触发程序,当数据库执行这些语句时候,就相当于事件发生
了,就会 自动 激发触发器执行相应的操作。
当对数据表中的数据执行插入、更新和删除操作,需要自动执行一些数据库逻辑时,可以使用触发器来
实现
说明:
表名 :表示触发器监控的对象。
BEFORE|AFTER :表示触发的时间。 BEFORE 表示在事件之前触发; AFTER 表示在事件之后触发。
INSERT|UPDATE|DELETE :表示触发的事件。
INSERT 表示插入记录时触发;
UPDATE 表示更新记录时触发;
DELETE 表示删除记录时触发。
创建数据库表
CREATE TABLE test_trigger (
id INT PRIMARY KEY AUTO_INCREMENT ,
t_note VARCHAR ( 30 )
);
CREATE TABLE test_trigger_log (
id INT PRIMARY KEY AUTO_INCREMENT ,
t_log VARCHAR ( 30 )
);
代码举例:
创建触发器之后
往
test_trigger 数据表插入数据之前,向
test_trigger_log 数据表中插入 before_insert 的日志信息
查看修改触发器
注意Navicat里不能用 \G 可以在黑屏里用