SQL基础-存储过程&触发器
一、存储过程
1、存储过程简介
存储过程:
一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,然后通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。 存储过程的创建:
使用关键字CREATE PROCEDURE
2、存储过程的创建及调用
比如:
现需要向学生表中插入新的学生数据。但在插入学生数据的时,需要同时检查老师表里的数据。
如果插入学生的老师不在老师表里,则先向老师表中插入一条老师数据,再向学生表中插入学生数据。 步骤:
1、使用SELECT语句查询新学生的老师是否存在于老师表中;
如果不存在 ,则继续执行第2步;
如果存在,则直接跳到第3步;
2、向老师表中插入老师数据;
3、向学生表中插入学生数据; ##
存储过程的创建: CREATE PROCEDURE sp_add_student(
IN i_student_id VARCHAR(50), IN i_student_name VARCHAR(100),
IN i_gender VARCHAR(10), IN i_birth_day DATE,
IN i_age INT, IN i_class_id VARCHAR(50),
IN i_score DECIMAL(18,2), IN i_teacher_id VARCHAR(20)
)
BEGIN
IF NOT EXISTS(SELECT 1 FROM teacher WHERE teacher_id = i_teacher_id) THEN
INSERT INTO teacher(teacher_id) VALUES (i_teacher_id);
END IF;
INSERT INTO student VALUES(
i_student_id,i_student_name,i_gender,i_birth_day,
i_age, i_class_id, i_score, i_teacher_id
);
END; ##
存储过程的调用:使用关键字CALL CALL sp_add_student(
'S20170091', '杨艳', '女', '2003-04-09',
15, 'G0206', 89.23, 'T0021'
);
3、存储过程的删除
存储过程的删除:
使用关键字DROP PROCEDURE 如:DROP PROCEDURE sp_add_student;
4、存储过程的优缺点
优点:
功能强大、灵活性高;
模块化,封装,代码复用; 缺点:
开发调试困难;
可移植性差,不同数据库,语法差别很大,移植困难;
二、触发器
1、触发器简介
触发器:
一种与表操作有关的数据库对象,当触发器所在表上出现指定事件(新增、修改、删除数据)时,将调用该对象,即表的操作事件触发表上的触发器的执行。 如上面的存储过程中:
写出了存储过程,并调用: CALL sp_add_student(
'S20170091', '杨艳', '女', '2003-04-09',
15, 'G0206', 89.23, 'T0021’
); 如果有多个学生的数据需要插入,则需要多次调用该存储过程; 可否不开发存储过程,在向student表插入(INSERT)数据前,后台自动判断并插入老师数据? ---触发器
2、触发器的创建及调用
触发器的创建:使用关键字CREATE TRIGGER 比如:
现需要向学生表中插入新的学生数据。但在插入学生数据的时,需要同时检查老师表里的数据。如果插入学生的老师不在老师表里,
则先向老师表中插入一条老师数据,再向学生表中插入学生数据。 创建一个BEFORE INSERT触发器:
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语句:
INSERT INTO student VALUES(
'S20170092', '李文', '女', '2002-11-19',
16, 'G0206', 55.32, 'T0022'
); BEFORE INSERT触发器:
在执行insert语句之前,会先自动执行触发器;
3、触发器的分类及执行顺序
按事件类型分:
INSERT触发器;
UPDATE触发器;
DELETE触发器; 按执行先后分:
BEFORE触发器;
AFTER触发器; NEW与OLD:
INSERT触发器:NEW 用来表示将要(BEFORE)或已经(AFTER)插入的新数据; UPDATE触发器:OLD 用来表示将要或已经被修改的原数据,NEW 用来表示将要或已经修改为的新数据; DELETE触发器:OLD 用来表示将要或已经被删除的原数据; 触发器执行时的异常情况:
如果 BEFORE 触发器执行失败,SQL 无法正确执行; SQL 执行失败时,AFTER 型触发器不会触发; AFTER 类型的触发器执行失败,SQL 会回滚;
4、触发器的删除
触发器的删除:
使用关键字DROP TRIGGER 如:DROP TRIGGER tri_add_student;
5、触发器的优缺点
优点:
自动触发,无需调用;
提供了一种检查、保证数据完整性的方法;
与存储过程一样,增强SQL语言的功能和灵活性; 缺点:
开发调试困难;
可移植性差;
SQL基础-存储过程&触发器的更多相关文章
- (2.11)Mysql之SQL基础——存储过程与变量
(2.11)Mysql之SQL基础——存储过程 关键字:mysql存储过程 查看存储过程: []SELECT * FROM information_schema.ROUTINES WHERE ROUT ...
- pl/sql基础知识—触发器
n 触发器简单介绍 触发器是指隐含执行的存储过程,它不是由程序员或者是DBA来显式调用,而是因为某个操作引发执行的.当定义触发器时,必须要指定触法的事件和触发的操作,常用的触发事件包括insert, ...
- ASP.NET WEBAPI 简单CURD综合测试(asp.net MVC,json.net,sql基础存储过程和视图,sqlhelper,json解析)
草图 真正的后端是不管前端是什么平台,用什么语言的,JSON格式的数据应该可以应对.用ASP.NET WEBAPI尝试做一个后端,实现最基本的CURD,业务逻辑和数据库操作都放在后端,前端只需要正 ...
- (2.12)Mysql之SQL基础——存储过程条件定义与错误处理
转自:博客园桦仔 5.存储过程条件定义与错误处理 -- (1)定义 [1]条件定义:declare condition_name condition for condition_value;[2]错误 ...
- (2.13)Mysql之SQL基础——触发器
(2.13)Mysql之SQL基础——触发器 关键词:Mysql触发器 1.一般形式 -- 0.查看触发器[1]SHOW TRIGGERS;[2]SELECT * FROM `information_ ...
- 2020重新出发,MySql基础,MySql视图&索引&存储过程&触发器
@ 目录 视图是什么 视图的优点 1) 定制用户数据,聚焦特定的数据 2) 简化数据操作 3) 提高数据的安全性 4) 共享所需数据 5) 更改数据格式 6) 重用 SQL 语句 MySQL创建视图 ...
- T——SQL基础语句(定义变量,赋值,取值,分支,循环,存储过程)
T--SQL基础语句 1.定义变量: declare @变量名 数据类型 ; declare @a int ; declare @b nvarchar(10) ; 2.赋值: 法1:set @变量名 ...
- SQL基础随记2 视图 存储过程
SQL基础随记2 视图 存储过程 View CREATE/ALTER/DROP VIEW ViewName as SELECT(...) 可以在视图的基础上继续创建视图,即,将之前创建的视图当做表 ...
- (2.15)Mysql之SQL基础——开发设计最佳规范
(2.15)Mysql之SQL基础——开发设计最佳规范 关键字:mysql三大范式,mysql sql开发规范 分析: show profile.mysqllsla.mysqldrmpslow.exp ...
随机推荐
- .net core将URL请求格式化为XML或JSON(网站动态生成sitemap.xml)
.net core将URL请求格式化为XML或JSON(网站动态生成sitemap.xml) 首先设置 Startup.cs 文件 配置 ConfigureServices services .Add ...
- Linux 脚本在线安装docker
2019/11/28, CentOS 8, docker 19.03.5, docker-compose 1.25.0 摘要:CentOS8使用脚本安装docker,dnf安装rpm,安装docker ...
- 几分钟打造超级好看又好用的zsh command line环境
source: https://www.pexels.com/photo/office-working-app-computer-97077/ 注:这篇适用于用MAC 开发的developer 身为程 ...
- MTSC 2019 深圳站精彩议题第一波更新! | 七五折门票火热售票中
MTSC(中国移动互联网测试开发大会)到今年已经成功举办了五届,这四年里,TesterHome社区一直秉持着务实.能落地.有深度.高质量.重分享的原则,从讲师邀请到内容筛选都严格把控,只为将最能提 ...
- 编写可维护的JavaScript-随笔(四)
避免使用全局变量 一.全局变量带来的问题 a) 命名冲突 i. 当全局变量和全局函数越来越多时,发生命名冲突的概率也随之增高 ii. 如果函数中使用了外部 ...
- jquery如何监听浏览器窗口大小并根据不同的大小输出不同的值
$(window).bind("load resize",function(){ document.documentElement.clientWidth >= 600 ? ...
- OCR4:Tesseract 4
Tesseract OCR 该软件包包含一个OCR引擎 - libtesseract和一个命令行程序 - tesseract. Tesseract 4增加了一个基于OCR引擎的新神经网络(LSTM ...
- tail: inotify cannot be used, reverting to polling: Too many open files
tail -f catalina.out 出现警告: tail: inotify cannot be used, reverting to polling: Too many open files l ...
- 在现有的mysql主从基础上,搭建mycat实现数据的读写分离
环境准备:MySQL服务器做好主从复制:centos6的系统 主:192.168.164.131 从:192.168.164.144 mycat服务器:192.168.164.141 a.将MySQL ...
- Httpd服务入门知识-Httpd服务常见配置案例之虚拟主机
Httpd服务入门知识-Httpd服务常见配置案例之虚拟主机 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.虚拟主机实现方案 1>.Apache httpd 有三种实现虚 ...