MySQL进阶之触发器

MySQL进阶之触发器

目录

  • MySQL进阶之触发器
    • 什么是触发器
    • 触发器的使用场景
    • 自定义触发器
    • 查看触发器
    • 删除触发器
    • 示例

什么是触发器

触发器是一种特殊的存储过程,它通常与表一起创建、修改和删除

触发器关键字: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执行增加操作之前执行触发器
beginend ##:以begin开头以end ##结束,中间是触发器执行的内容
delimiter ;:触发器创建完毕后将结束语句改回;

MySQL进阶之触发器_第1张图片

查看表class2原内容

MySQL进阶之触发器_第2张图片

对表class1进行增加操作后查看表class2的内容

MySQL进阶之触发器_第3张图片

你可能感兴趣的:(MySQL,mysql,android,数据库)