SQL触发器定义与使用
比如:现需要向学生表中插入新的学生数据。但在插入学生数据的时,需要同时检查老师表里的数据。如果插入学生的老师不在老师表里,则先向老师表中插入一条老师数据,再向学生表中插入学生数据。
?1 2 3 4 | CALL sp_add_student( 'S20170091' , '杨艳' , '女' , '2003-04-09' , 15, 'G0206' , 89.23, 'T0021' ); |
如果有多个学生的数据需要插入,则需要多次调用该存储过程;可否不开发存储过程,在向student表插入(INSERT)数据前,后台自动判断并插入老师数据?
触发器简介
触发器:一种与表操作有关的数据库对象,当触发器所在表上出现指定事件(新增、修改、删除数据)时,将调用该对象,即表的操作事件触发表上的触发器的执行。
触发器的创建及调用
比如:现需要向学生表中插入新的学生数据。但在插入学生数据的时,需要同时检查老师表里的数据。如果插入学生的老师不在老师表里,则先向老师表中插入一条老师数据,再向学生表中插入学生数据。
触发器的创建:使用关键字CREATE TRIGGER
1 2 3 4 5 6 7 | CREATE TRIGGER tri_add_student BEFORE INSERT ON student FOR EACH ROW BEGIN IF NOT EXISTS( SELECT 1 FROM teacher WHERE teacher_id = new.teacher_id) THEN INSERT INTO teacher(teacher_id) VALUES (new.teacher_id); END IF; END ; |
1 2 3 4 | INSERT INTO student VALUES ( 'S20170092' , '李文' , '女' , '2002-11-19' , 16, 'G0206' , 55.32, 'T0022' ); |
触发器的分类及执行顺序
按事件类型分:
- INSERT触发器;
- UPDATE触发器;
- DELETE触发器;
按执行先后分:
- BEFORE触发器;
- AFTER触发器;
NEW与OLD:
- INSERT触发器:NEW 用来表示将要(BEFORE)或已经(AFTER)插入的新数据;
- UPDATE触发器:OLD 用来表示将要或已经被修改的原数据,NEW 用来表示将要或已经修改为的新数据;
- DELETE触发器:OLD 用来表示将要或已经被删除的原数据;
触发器执行时的异常情况:
- 如果 BEFORE 触发器执行失败,SQL 无法正确执行;
- SQL 执行失败时,AFTER 型触发器不会触发;
- AFTER 类型的触发器执行失败,SQL 会回滚;
触发器的删除
触发器的删除:使用关键字DROP TRIGGER
如:DROP TRIGGER tri_add_student;
触发器的优缺点
优点:
- 自动触发,无需调用;
- 提供了一种检查、保证数据完整性的方法;
- 与存储过程一样,增强SQL语言的功能和灵活性;
缺点:
- 开发调试困难;
- 可移植性差;
到此这篇关于SQL触发器定义与使用的文章就介绍到这了,更多相关SQL触发器内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!
原文链接:https://liyunxiang.blog.csdn.net/article/details/128525164
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。