博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQL基础-存储过程&触发器
阅读量:5219 次
发布时间:2019-06-14

本文共 2543 字,大约阅读时间需要 8 分钟。

一、存储过程

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;##存储过程的调用:使用关键字CALLCALL 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 INSERTON student FOR EACH ROWBEGIN    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语言的功能和灵活性;缺点: 开发调试困难; 可移植性差;

转载于:https://www.cnblogs.com/weiyiming007/p/11446734.html

你可能感兴趣的文章
迅为iTOP-4418开发板兼容八核6818开发板介绍
查看>>
com.fasterxml.jackson.databind.JsonMappingException
查看>>
【UVa 540】Team Queue
查看>>
排序算法(二)
查看>>
Python内置函数(36)——iter
查看>>
HTML标签_1
查看>>
jsp组成元素
查看>>
排序算法(转)
查看>>
windows自带的可生成各种数据库连接字符串工具打开方法
查看>>
Python命名规范
查看>>
滚动条
查看>>
程序员的自我修养九Windows下的动态链接
查看>>
Codeforces Round #361 (Div. 2)
查看>>
细说WebSocket - Node篇
查看>>
[洛谷1485] 火枪打怪
查看>>
Extjs控件之 grid打印功能
查看>>
枚举类型(不常用)递归
查看>>
ETL
查看>>
Tomcat源码分析(六)--日志记录器和国际化
查看>>
minggw 安装
查看>>