MySql数据库9-提升-触发器

介绍

触发器是与表相关的数据库对象,在insert/update/delete之前或之后,触发并执行触发器中定义的SQL语句集合。触发器的这种特性可以协助应用在数据库端确保数据的完整性,日志记录,数据校验等操作。
使用别名OLD和NEW来引用触发器中发生变化的记录内容,当前触发器仅支持行即触发,不支持语句级触发。

触发器类型NEW和OLD的使用
INSERT触发器NEW表示将要或者已经新增的数据
UPDATE触发器OLD表示修改之前的数据,NEW表示将要或者已经修改后的数据
DELETE触发器OLD表示将要或者已经删除的数据

创建触发器

语法:

create trigger 触发器名称
before|after insert|update|delete
on 表名
[for each row] # 行级触发器
begin
	触发器内容
end

使用示例:

需求:在插入学生信息的时候,自动查询出老师的信息,然后插入到学生老师对应关系表中

DELIMITER $
create trigger auto_add_teacher
    after insert
on student_info
    for each row
begin
    declare teacherName varchar(32) default '没有赋值成功';
    # 根据学生的班级好查询出老师姓名放到teacherName这个变量中
    select t.t_name into teacherName
    from teacher_info t where t.class = new.class;
    # 插入学生姓名和老师姓名
    insert into student_teacher_info(s_name, t_name) values (new.s_name,teacherName);
end$

在mysql客户端执行

创建触发器
mysql> create trigger auto_add_teacher
    ->     after insert
    -> on student_info
    ->     for each row
    -> begin
    ->     declare teacherName varchar(32) default '';
    ->     select t.t_name into teacherName
    ->     from teacher_info t where t.class = new.class;
    ->     insert into student_teacher_info(s_name, t_name) values (new.s_name,teacherName);
    -> end$
Query OK, 0 rows affected (0.01 sec)

插入一条学生信息
mysql> insert into student_info(key_id, s_name, age, class) VALUES (null,'xiaohua',17,'002');$
Query OK, 1 row affected (0.01 sec)

学生信息插入成功
mysql> select * from student_info $
+--------+---------+------+-------+
| key_id | s_name  | age  | class |
+--------+---------+------+-------+
|      1 | xiaohua |   17 | 002   |
+--------+---------+------+-------+
1 row in set (0.00 sec)

学生老师对应关系信息插入成功
mysql> select * from student_teacher_info $
+---------+--------+
| s_name  | t_name |
+---------+--------+
| xiaohua | 张老师    |
+---------+--------+
1 row in set (0.00 sec)

查看和删除

查看语法

show triggers;

使用\G格式化查询结果:

mysql> show triggers \G $
*************************** 1. row ***************************
             Trigger: auto_add_teacher
               Event: INSERT
               Table: student_info
           Statement: begin
    declare teacherName varchar(32) default '';
    select t.t_name into teacherName
    from teacher_info t where t.class = new.class;
    insert into student_teacher_info(s_name, t_name) values (new.s_name,teacherName);
end
              Timing: AFTER
             Created: 2020-07-12 07:42:45.05
            sql_mode: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
             Definer: root@localhost
character_set_client: latin1
collation_connection: latin1_swedish_ci
  Database Collation: utf8_general_ci
1 row in set (0.00 sec)

删除语法:

drop trigger [schema_name].trigger_name
# 如果没有指定schema,则默认为当前数据库
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值