1,什么是MySQL触发器?
触发器是与表有关的数据库对象,在满足定义条件时触发并执行触发器中定义的语句集合
2,触发器的作用
触发器可以协助应用在数据库端确保数据的完整性。举个例子:比如你现在有两张表【订单表】【日志表】,现在要确保当一个订单被创建的时候需要向日志表记录一条日志信息,如果在不使用触发器的情况下,你需要编写程序才能完成。而触发器的作用就是在你插入一条数据之后直接帮你在日志表里面插入一条日志记录,当然它并不只是插入,修改、删除都可以执行
3,创建触发器
创建单条执行语句触发器语法如下:
创建多条执行语句触发器语法如下:
其中,在begin与end之间的语句列表表示需要执行多个sql语句,不同的sql语句用分号进行分开。同时在begin与end中间是可以定义变量赋值的,将会在下面将举例说明。
4,触发器触发事件
load data语句用于将一个文件装入到数据表中,相当于一系列的insert操作。replace一般情况下与insert没有区别,但是当你的表里面存在primary或者unique索引的时候,如果你插入的数据和原来primary key重复的情况下或者unique相同的时候,会删除你原来的数据,然后将数据重新插入。所以有的时候它会先执行一条delete,再执行insert,相当于执行了两条语句
5,NEW以及OLD的使用
6,举个例子
说来那么多下面就让我们来创建触发器吧!现在有表如下:
班级表class:
CREATE TABLE `class` (
`classID` int(4) unsigned NOT NULL AUTO_INCREMENT COMMENT '班级ID',
`stuCount` int(4) NOT NULL COMMENT '班级人数',
PRIMARY KEY (`classID`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;
学生表student:
CREATE TABLE `student` (
`id` int(6) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID',
`stuID` int(11) NOT NULL COMMENT '学号',
`classID` int(4) NOT NULL COMMENT '班级ID',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
需求是创建触发器来使班级表中的班内学生数随着学生表的添加而自动更新班级人数。触发器创建代码如下
CREATE TRIGGER `dome` BEFORE INSERT ON `student` FOR EACH ROW begin
declare a int;
set a = (select stuCount from class where classID = new.classID);
update class set stuCount = a+1 where classID = new.classID;
end;
begin与end中通过declare来创建变量,该变量与sql语句一样,不区分大小写,只能在begin与end之间使用。注意定义变量必须声明类型,类型为mysql支持的所有类型,同时可以定义多个同类型的变量。对变量赋值使用set语句。语法如上
7,查看触发器
和查看数据库(show databases)查看数据表(show tables)一样,查看触发器语法:SHOW TRIGGER;
8,删除触发器
和删除数据库,删除数据表一样。删除触发器语法:DROP TRIGGER trigger_name;