一、存储过程

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基础-存储过程&触发器的更多相关文章

  1. (2.11)Mysql之SQL基础——存储过程与变量

    (2.11)Mysql之SQL基础——存储过程 关键字:mysql存储过程 查看存储过程: []SELECT * FROM information_schema.ROUTINES WHERE ROUT ...

  2. pl/sql基础知识—触发器

    n  触发器简单介绍 触发器是指隐含执行的存储过程,它不是由程序员或者是DBA来显式调用,而是因为某个操作引发执行的.当定义触发器时,必须要指定触法的事件和触发的操作,常用的触发事件包括insert, ...

  3. ASP.NET WEBAPI 简单CURD综合测试(asp.net MVC,json.net,sql基础存储过程和视图,sqlhelper,json解析)

    草图   真正的后端是不管前端是什么平台,用什么语言的,JSON格式的数据应该可以应对.用ASP.NET WEBAPI尝试做一个后端,实现最基本的CURD,业务逻辑和数据库操作都放在后端,前端只需要正 ...

  4. (2.12)Mysql之SQL基础——存储过程条件定义与错误处理

    转自:博客园桦仔 5.存储过程条件定义与错误处理 -- (1)定义 [1]条件定义:declare condition_name condition for condition_value;[2]错误 ...

  5. (2.13)Mysql之SQL基础——触发器

    (2.13)Mysql之SQL基础——触发器 关键词:Mysql触发器 1.一般形式 -- 0.查看触发器[1]SHOW TRIGGERS;[2]SELECT * FROM `information_ ...

  6. 2020重新出发,MySql基础,MySql视图&索引&存储过程&触发器

    @ 目录 视图是什么 视图的优点 1) 定制用户数据,聚焦特定的数据 2) 简化数据操作 3) 提高数据的安全性 4) 共享所需数据 5) 更改数据格式 6) 重用 SQL 语句 MySQL创建视图 ...

  7. T——SQL基础语句(定义变量,赋值,取值,分支,循环,存储过程)

    T--SQL基础语句 1.定义变量: declare @变量名 数据类型 ; declare @a int ; declare @b  nvarchar(10) ; 2.赋值: 法1:set @变量名 ...

  8. SQL基础随记2 视图 存储过程

    SQL基础随记2 视图 存储过程   View CREATE/ALTER/DROP VIEW ViewName as SELECT(...) 可以在视图的基础上继续创建视图,即,将之前创建的视图当做表 ...

  9. (2.15)Mysql之SQL基础——开发设计最佳规范

    (2.15)Mysql之SQL基础——开发设计最佳规范 关键字:mysql三大范式,mysql sql开发规范 分析: show profile.mysqllsla.mysqldrmpslow.exp ...

随机推荐

  1. [其它]iOS 13 正式版发布 iPhone 6s或更新型号均可升级

    苹果今天(2019.09.20)发布了 iOS 13 正式版,可以升级的设备包括 iPhone 6s 或更新型号.第七代 iPod Touch. iOS 13 推出深色模式,为 iPhone 带来截然 ...

  2. Mycat分布式数据库架构解决方案--Mycat实现数据库分表

    echo编辑整理,欢迎转载,转载请声明文章来源.欢迎添加echo微信(微信号:t2421499075)交流学习. 百战不败,依不自称常胜,百败不颓,依能奋力前行.--这才是真正的堪称强大!!! 准备工 ...

  3. Java自学-I/O File类

    Java 的File类,以及常用方法 文件和文件夹都是用File代表 步骤 1 : 创建一个文件对象 使用绝对路径或者相对路径创建File对象 package file; import java.io ...

  4. OCR6:Custom Traineddata

    参考:https://groups.google.com/forum/#!msg/tesseract-ocr/MSYezIbckvs/kO1VoNKMDMQJ V4版本代码示例 : import py ...

  5. Linux普通用户登录后,命令行提示:-bash-4.1$ ,原因分析及解决

    原文 有时候在使用用户登陆Linux系统时会发现,命令行提示符成了:-bash-4.1$,不显示用户名,路径信息. 原因:用户家目录里面与环境变量有关的文件被删除所导致的 也就是这俩文件:.bash_ ...

  6. Linux more与less命令

    1.命令简介 more (more) 该命令一次显示一屏文本,满屏后停下来,并且在屏幕的底部出现一个提示信息,给出至今己显示的该文件的百分比,方便逐页阅读(file perusal filter fo ...

  7. 海思3519A 开发环境设置相关

    设置板卡和虚拟机的网络参数 setenv serverip 192.168.1.107 setenv ipaddr 192.168.1.10 setenv gatewayip 192.168.1.1 ...

  8. Docker08-网络管理

    目录 桥接网络 Bridge Network 相关操作命令 实例演示:容器之间通过自定义bridge通讯 宿主网络 Host Network Overlay Network 相关操作命令 实例演示:容 ...

  9. Kubernetes 监控

    1. Weave Scope Weave Scope 容器地图 创建 Kubernetes 集群并部署容器化应用只是第一步.一旦集群运行起来,我们需要确保一起正常,所有必要组件就位并各司其职,有足够的 ...

  10. css3过渡动画 transition

    transition CSS3 过渡是元素从一种样式逐渐改变为另一种的效果. 要实现这一点,必须规定两项内容: 指定要添加效果的CSS属性 指定效果的持续时间 例如 这是下面代码的预览界面预览界面 & ...