1. 触发器

表中的某条记录修改后,可能导致一系列数据都要被修改,在SQL语句层面上则表现为执行了某条SQL语句后要接着执行一系列语句。例如:当学生表里的一个学生记录被删除,则班级表里对应班级的人数要减一。

触发器常用于上述情况,触发器为表绑定一系列语句,当表中记录发送该变时则触发触发器,自动执行相应语句。

2. 创建触发器

创建触发器需要指明对哪个表进行了什么操作 在这之前或之后 执行设定好的一系列语句

#创建触发器
create trigger 触发器名 before|after insert|update|delete on 表名 for each row 执行语句;

create trigger 触发器名 before|after insert|update|delete on 表名 for each row begin
	执行语句1;
	执行语句2;
	...
	end;
  • 执行语句
    执行语句中常常需要加上条件,且一般是和表名对应的表有关,这时条件里不能出现表名,而需要用NEWOLD代替;
    insert操作,则用new;delete操作,则用old;update操作,new或old都行;
  • 例子
    有一班级表一学生表;



    创建触发器;
create trigger tri_insert_student after insert on student for each row update class set student_count = student_count+1 where class.id = new.class_id;

对学生表插入新值,班级表学生人数列自动加1;

ELSEIF MySQL 触发器 mysql触发器怎么写_ELSEIF MySQL 触发器

3. 查看和删除触发器

#查看触发器
show triggers;

#删除触发器
drop trigger 触发器名;

4. 注意事项

  • 触发器创建
    创建触发器时,不能有同名触发器;
    两个触发器,触发条件不能相同,即不能是对同一表的相同操作以及相同时间;
  • 分隔符
    当要触发多条语句时,在begin、end之间插入多条SQL语句,SQL语句之间以;作为分隔符;
    在MySQL中同时使用;作为命令的结束符,因此会产生冲突,可以使用DELIMITER $$将结束符设置为$$;
DELIMITER $$	#改变结束符
create trigger 触发器名 before|after insert|update|delete on 表名 for each row begin
执行语句1;
执行语句2;
...
end
$$
DELIMITER ;		#恢复结束符