唐文 2020-02-20
是在数据库系统中,一组为了完成特定功能SQL语句集,经编译后存储在数据库中,用户通过制定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。
存储过程是经过编译的SQL语句集。编译后节省很多性能。
二、为什么使用存储过程?
1、存储过程只在创造时进行编译,以后每次执行存储过程都不需要再重新编译,而一般SQL语句每执行一次就编译一次,所以存储过程可以提高数据库执行速度
2、当对数据库进行复杂操作时(如对多个表进行UPDATE,INSERT,QUERY,DELETE时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用,这些操作如果用程序来完成,就变成一条条的SQL语句,可能要多次链接数据库,而换成存储过程,只需要链接一次数据库就可以了
3、存储过程可以重复使用,可以减少数据库开发人员的工作量
4、安全性高,可设定只有某些用户才具有对指定存储过程的使用权
三、存储过程的缺点
1、可移植性差
2、对于简单的SQL语句,存储过程没什么优势
3、存储过程中不一定会减少网络传输
4、如果一个用户使用数据库,那么存储过程对安全也没什么影响
5、团队开发时需要统一标准,否则后期维护起来麻烦
6、在大并发访问量的情况下,不宜写过多涉及运算的存储过程
7、业务逻辑复杂时,特别是涉及到对很大的表进行操作的时候,不如在前端先简化业务逻辑
四、存储过程和函数、触发器的区别
1、触发器用于完成一些触发条件所引发的操作,触发器的执行是自动化的
2、自定义函数只能通过return语句返回单个值或者表对象,而存储过程不能调用return语句,但可以通过out参数返回多个值。函数可以在SQL语句中结合使用,函数不能用临时表,只能用表变量,还有一些系统函数都不可用
3、存储过程用于完成一系列的SQL操作,批量的完成数据库操作工作,由使用者调用执行
五、存储过程的创建
解析:
1、写mysql存储过程,首先改变语句结束符,一般改成 //,因为存储过程一般包含多条SQL语句,如果使用默认结束符可能中断SQL的运行
2、mysql> CREATE PROCEDURE存储过程的固定语句,后面跟存储过程的名称,()里面包含(存储过程的参数 参数名称 数据类型)
3、BEGIN....END是存储过程的开始和结束符号,中间是存储过程的内容
4、//结束,表示整个存储过程的语句已经书写完毕
5、书写完毕后将mysql的结束符改回成 ;
6、CALL加上存储过程的名称、参数来调用存储过程
存储过程的参数
格式:
CREATE PROCEDURE 存储过程名([[IN |OUT |INOUT ] 参数名 数据类形...])
参数IN的特点:存储过程运行时,读取外部变量值,存储过程完成后,其外部变量的值不发生改变,依然是存储过程外部设定的变量值
参数OUT的特点:不读取外部变量的值,存储过程运行完成后,外部变量的值更新为存储过程内部的值
参数INOUT的特点:运行存储过程时,读取外部变量的值,存储过程运行完成后,外部变量的值更新为存储过程内部的值