触发器是一种特殊的存储过程,它通常与表一起创建、修改和删除
触发器关键字:trigger
,是指事先为某张表绑定一段代码,当表中的某些内容发生改变**(增、删、改)**的时候,系统会自动触发代码并执行
触发器发生错误时,前面用户已经执行成功的操作会被撤销,类似事务的回滚
例如数据验证、数据补全、数据同步、日志记录等
在创建触发器之前有一个关键字需要了解:delimiter
delimiter
可以修改MySQL默认的;
结束语句
delimiter ##
...
end ##
delimiter ; -- 将分隔符恢复为默认值
当需要定义复杂的多行存储语句时就可以使用
delimiter
创建触发器基本语法:
delimiter 自定义结束符号
create trigger 触发器名字 触发时间 触发事件 on 表名 for each row
begin
-- 触发器内容主体,每行用分号结尾
end
-- 自定义的结束符号
delimiter ;
{BEFORE | AFTER}
) :指定触发器在所触发事件之前或之后执行insert
update
delete
):当改事件触发时将会执行触发器主体中的代码for each row
表示当前触发器绑定的是实质的每一行,因此当变化都会触发该触发器show triggers;
-- trigger_name:要删除的触发器名字
drop trigger trigger_name;
创建两张学生表
create table class1 (id int primary key,name varchar(32),age int,score float);
create table class2 (id int primary key,name varchar(32),age int,score float);
添加数据
insert into class1 (id, name, age, score) VALUES
(1, 'Alice', 18, 85.5),
(2, 'Bob', 19, 92.0),
(3, 'Charlie', 20, 78.5),
(4, 'David', 21, 89.3);
insert into class2 (id, name, age, score) VALUES
(5, 'Emma', 19, 95.7),
(6, 'Frank', 20, 81.2),
(7, 'Grace', 22, 87.9),
(8, 'Henry', 18, 93.4);
创建触发器
delimiter ##
create trigger class_trigger before insert on class1
begin
update class2 set age = age + 1;
end
##
delimiter ;
delimiter ##
:将结束语句修改为##
create trigger class_trigger
:创建名为class_trigger
的触发器
before insert on class1
:在表class1
执行增加操作之前执行触发器
begin
…end ##
:以begin
开头以end ##
结束,中间是触发器执行的内容
delimiter ;
:触发器创建完毕后将结束语句改回;
查看表class2
原内容
对表class1
进行增加操作后查看表class2
的内容