存储过程

存储过程简介

我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。
注意: 存储过程跟触发器有点类似,都是一组SQL集,但是存储过程是主动调用的,且功能比触发器更加强大,触发器是某件事触发后自动调用。

存储过程的特征:

  1. 有输入输出参数,可以声明变量,有if/else, case,while等控制语句,通过编写存储过程,可以实现复杂的逻辑功能;
  2. 函数的普遍特性:模块化,封装,代码复用;
  3. 速度快,只有首次执行需经过编译和优化步骤,后续被调用可以直接执行,省去以上步骤;

存储过程的使用场景:

存储过程处理比较复杂的业务时比较实用。复杂的业务逻辑需要多条 SQL语句。这些语句要分别地从客户机发送到服务器,当客户机和服务器之间的操作很多时,将产生大量的网络传输。如果将这些操作放在一个存储过程中,那么客户机和服务器之间的网络传输就会大大减少,降低了网络负载。

存储过程的优点:

**1. 增强了sql语言的功能和灵活性。**存储过程可以使用流控制语句进行编写,有很强的灵活性也可以完成复杂的计算。
**2. 存储过程允许标准组件是编程。**存储过程被创建后,可以在程序中被多次调用,而不必重新编写该存储过程的SQL语句。而且数据库专业人员可以随时对存储过程进行修改,对应用程序源代码毫无影响。
**3. 存储过程能实现较快的执行速度。**如果某一操作包含大量的Transaction-SQL代码或分别被多次执行,那么存储过程要比批处理的执行速度快很多。因为存储过程是预编译的。在首次运行一个存储过程时查询,优化器对其进行分析优化,并且给出最终被存储在系统表中的执行计划。而批处理的Transaction-SQL语句在每次运行时都要进行编译和优化,速度相对要慢一些。

存储过程的缺点

  1. 消耗内存:如果使用大量存储过程,那么使用这些存储过程的每个连接的 内存使用量将会大大增加;此外 ,如果 您在存储过程中过度使用大量逻辑操作,则CPU使用率也会增加,因为数据库服务器的设计不当于逻辑运算。
  2. 难维护和难调试:mysq不支持 存储过程的调试;存储过程学习难 度大只是部分DBA的必备开发技能,对于普通的使用者维护难度加大。
  3. 语法不支持跨数据库使用:Mysql和Oracle的存储过程的语法不通用,学习成本增加

存储过程的使用:创建、调用

数据库存储过程及触发器是什么?
解释: MySQL默认 以";"为分 隔符 ,如果 没有声明分割符 ,则编译器会把存储过程当成SQL语句进行处理,因此编译过程会报错 ,所以要事先用“DELIMITER"”声明当 前段 分隔符 ,让编译器 把两 个""之间的 内容 当做存储过程的代码,不会执行这些代码;“DELIMITER;”的意为把分隔符还原。刚才 创建存储过程hi()时发现是函数,可以往里 传入参数,参数共有三种 :INT,OUT,INOUT.IN参数的值必须在调用存储过程时指定,在存储过程中修改该参数的值不能被返回,为默认值OU T:该值可在存储过程内部被改变,并可返回INOU T:调用时指定,并且可被改变和返回以下案例仅供参考:
IN案例
数据库存储过程及触发器是什么?
OUT 案例
数据库存储过程及触发器是什么?
ONOUT 例子
数据库存储过程及触发器是什么?

参考资料

1.https://www.cnblogs.com/mark-chan/p/5384139.html
2.https://blog.csdn.net/xiaolyuh123/article/details/76147102
3.http://tool.oschina.net/apidocs/apidoc?api=mysql-5.1-zh

触发器

触发器简介:

触发器(trigger)是SQL server 提供 给程序员和数据分析员来保证 数据完整性的一 种方法 ,它是与表事件 相关 的特 殊的存储过程,它的执行不是由程序调用,也不是手工启 动,而是由事件来触发,比如当对一个表进行操作(insert,delete, update)时就会**它执行。 触发器定义为在语句插入,更新或删除关联表中的行时**。这些行操作是触发事件。例如,可以通过INSERT或LOAD DATA语句 插入行,并为每个插入的行 **插入触发器。可以将触发器设置 为在触发事件之前或之后**。例如,您可以在插入表中的每一行之前或更新的每一行之后**触发器。 简 单的说,就是一张表发生了某件事(插入、删除、更新操作),然后自动触发了预先编写好的若干条SQL语句的执行。

注意:

触发器是一种特殊类型的存储过程,它又不同于存储过程,触发器主要是通过事件进行触发而被执行的,而存储过程可以通过存储过程名字而被直接调用。

触发器的特征:

触发事件的操作和触发器里的SQL语句是一个事务操作,具有原子 性,要么全部执行,要么都不执行。

触发器的使用场景:

满足特定条件触发响应的动作

触发器的优点:

比较适用于复杂的业务逻辑。比如,数据库中一条数据发生改变(更新、删除、增加)时,通过触发器让其他多张表发生改变。

触发器的缺点:

  1. 增加维护的成本。有些业务逻辑在代码中处理,有些业务逻辑用触发器处理,会使后期维护变得困难
  2. 学习成本增加: Mysql和Oracle的触发器的语法格式是不一样的。

触发器的使用

语法:
**Create trigger <触发器名称> Delimiter–**触发器必须有名字,最多64个字符,分隔符结尾。{BEFORE|AFTER}–触发器有执行的时间设置 :可以 设置 为事件发生前或后。 {INSERT|UPDATE|DELETE}–同样 也能 设定触发的事件:它们可以在执行insert、update或delete的过程中触发。ON<表名称>–触发器是属于 某一个表的:当在这个表上执行插入、 更新或 删除操作的时候就导致触发器的**. 我们不能给同一张表的同一个事件安排两个触发器。FOREACHROW–触发器的执行间隔:FOR EACH ROW子句通知触发器 每隔一行执行一次动作,而不是对整个表执行一次。<触发器SQL语句>–触发器包含所要触发的SQL语句:这里的语句可以是任何合法的语句, 包括复合语句,但是这里的语句受的限制和函数的一样。
案例:

数据库存储过程及触发器是什么?
创建触发器
数据库存储过程及触发器是什么?
插入一条订单数据查看触发器
数据库存储过程及触发器是什么?
查看触发器

数据库存储过程及触发器是什么?
删除触发器更多参考:
数据库存储过程及触发器是什么?

更多参考:

https://dev.mysql.com/doc/refman/8.0/en/trigger-syntax.html
https://blog.csdn.net/yang1464657625/article/details/60463721

相关文章: