SQL触发器定义与使用
作者:黑码哥 时间:2024-01-28 09:21:27
比如:现需要向学生表中插入新的学生数据。但在插入学生数据的时,需要同时检查老师表里的数据。如果插入学生的老师不在老师表里,则先向老师表中插入一条老师数据,再向学生表中插入学生数据。
CALL sp_add_student(
'S20170091', '杨艳', '女', '2003-04-09',
15, 'G0206', 89.23, 'T0021'
);
如果有多个学生的数据需要插入,则需要多次调用该存储过程;可否不开发存储过程,在向student表插入(INSERT)数据前,后台自动判断并插入老师数据?
触发器简介
触发器:一种与表操作有关的数据库对象,当触发器所在表上出现指定事件(新增、修改、删除数据)时,将调用该对象,即表的操作事件触发表上的触发器的执行。
触发器的创建及调用
比如:现需要向学生表中插入新的学生数据。但在插入学生数据的时,需要同时检查老师表里的数据。如果插入学生的老师不在老师表里,则先向老师表中插入一条老师数据,再向学生表中插入学生数据。
触发器的创建:使用关键字CREATE TRIGGER
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;
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语言的功能和灵活性;
缺点:
开发调试困难;
可移植性差;
来源:https://liyunxiang.blog.csdn.net/article/details/128525164
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
mysql 5.6.23 安装配置环境变量教程
![](https://img.aspxhome.com/file/2023/7/116777_0s.png)
从多个tfrecord文件中无限读取文件的例子
Python机器学习NLP自然语言处理基本操作词向量模型
![](https://img.aspxhome.com/file/2023/4/78604_0s.gif)
Django haystack实现全文搜索代码示例
python运行或调用另一个py文件或参数方式
![](https://img.aspxhome.com/file/2023/0/82780_0s.png)
Python基于正则表达式实现计算器功能
Vue CLI2升级至Vue CLI3的方法步骤
![](https://img.aspxhome.com/file/2023/4/122004_0s.jpg)
网页布局设计基础
TensorFlow实现创建分类器
![](https://img.aspxhome.com/file/2023/4/104914_0s.jpg)
浅谈慢SQL优化之索引的作用
![](https://img.aspxhome.com/file/2023/7/98387_0s.webp)
php在linux环境中如何使用redis详解
Python简直是万能的,这5大主要用途你一定要知道!(推荐)
Python中的异常处理学习笔记
ODBC连接数据库以SQLserver为例图文详解
![](https://img.aspxhome.com/file/2023/6/122366_0s.png)
Python调用C语言的实现
陌生网页交互行为分析(1)——奇怪的关闭按钮
![](https://img.aspxhome.com/file/UploadPic/20091/8/2008-12-30_155447-20s.png)
golang使用map支持高并发的方法(1000万次操作14ms)
MySQL中Decimal类型和Float Double的区别(详解)
NodeJs Express路由使用流程解析
python实现堆排序的实例讲解
![](https://img.aspxhome.com/file/2023/9/90519_0s.png)