> 文档中心 > 数据库触发器

数据库触发器


触发器


只有执行insert/update/delete操作时才能出发触发器的执行

案例说明

创建触发器触发表--修改学生信息记录表

 create table variation(     s_id int not null,     s_name varchar(20) not null,     var_text text not null,     cur_date date not null );

创建触发器

 drop trigger if exists stu_msg; -- 创建 学生信息插入 触发器 create trigger stu_msg after insert on student for each row begin     insert into variation values (NEW.stu_id, NEW.stu_name,concat('学号为:', NEW.stu_id, '的', NEW.stu_name, '学生 的学生信息被添加...'), now()); end; ​ insert into student values (1005, 'Kok', '女', 12);
 drop trigger if exists stu_msg2; -- 创建 学生信息修改 触发器 create trigger stu_msg2     after update     on student     for each row begin     insert into variation values (NEW.stu_id, NEW.stu_name,concat('学号为:', NEW.stu_id, '的', NEW.stu_name, '学生 的学生信息被更新...'), now()); end; ​ update student set stu_age = 10 where stu_id = 1002;
 drop trigger if exists stu_msg3; -- 创建 学生信息删除 触发器 create trigger stu_msg3     after delete     on student     for each row begin     insert into variation values (OLD.stu_id, OLD.stu_name,concat('学号为:', OLD.stu_id, '的', OLD.stu_name, '学生 的学生信息被删除...'), now()); end; ​ delete from student where stu_id = 1005;

学生表根据存储过程中案例的创建

基本语法

 create trigger   [update[,delete[,insert]]] on  for each row begin   -- sql语句 end;

查看触发器

 show triggers;

new与old

触发器用于监听对数据表中数据的insert/update/delete操作,在触发器中通常处理一些DML的关联操作;我们可以使用newold关键字在触发器中获取触发这个触发器的DML操作的数据

  • new:用于在触发器中获取insert/update添加和修改后的数据记录

  • old:在触发器中用于获取delete操作删除前的数据或update修改前的数据

CHAR_LENGTH()和LENGTH()区别

CHAR_LENGTH():返回变量中字符的个数

LENGTH():返回字符串占多少字节