【MySQL】数据库之存储过程(“SQL语句的脚本“)

您所在的位置:网站首页 调用存储过程pro1的命令 【MySQL】数据库之存储过程(“SQL语句的脚本“)

【MySQL】数据库之存储过程(“SQL语句的脚本“)

2024-07-04 01:39| 来源: 网络整理| 查看: 265

目录

一、什么是存储过程?

二、存储过程的作用

三、如何创建、调用、查看、删除、修改存储过程

四、存储过程的参数(输入参数,输出参数,输入输出参数)

第一种:输入参数 

第二种:输出参数

第三种:输入输出参数

五、存储过程中的条件与循环语句

第一种:if条件的存储过程

第二种:while循环的存储过程 

六、如何一次性往数据库中插入上万条数据?

第一种存储过程实现上万数据插入

第二种shell脚本实现上万数据插入

一、什么是存储过程?

存储过程是一组为了完成特定功能的SQL语句的集合。有点shell脚本的意思

存储过程在使用过程中,是将常用或者复杂的工作预先使用SQL语句写好并用一个指定的名称存储起来,这个过程经编译和优化存储在数据库服务器中,当需要使用该存储过程的时候,只需要调用即可。存储过程在执行上比传统的SQL语句速度更快,执行的效率也更高。

二、存储过程的作用

优点:

1、执行一次后,会将生成的二进制代码驻留缓冲区,提高执行效率;

2、SQL语句加上控制语句的集合,灵活性高;

3、在服务器端存储,客户端调用时,降低网络负载;

4、可以多次重复调用存储过程,也可以随时修改,不影响客户端的调用;

5、可以完成所有数据库的操作,也可以控制数据库的信息访问权限。

三、如何创建、调用、查看、删除、修改存储过程

存储过程也是一种对象,增删改查的命令可以套用DDL的相关语句

存储过程是创建在库中的,需要先用use切换库,否则需要在创建的时候,指定库名 ##创建存储过程了 delimiter 结束符 ##先自定义结束符,因为存储过程中的SQL语句用分号结尾,这时需要修改作为区分 create procedure 存储过程名称() begin SQL语句集合 end结束符号 delimiter ; ##将结束符修改回为分号 ##查看存储过程 show create procedure [库名].存储过程名称; show procedure status like '存储过程名称' \G; ##支持通配符 ##调用存储过程 call 存储过程名称; ##删除存储过程 drop procedure 存储过程名称; drop procedure if exists 存储过程名称; ##如果存在则删除

 

修改存储过程的方法:

存储过程内容的修改方法是通过删除原有存储过程,之后再以相同的名称创建新的存储过程。如果要修改存储过程的名称,可以先删除原存储过程,再以不同的命名创建新的存储过程。 

总结就是重新创建储存过程,没有直接删除的方法

四、存储过程的参数(输入参数,输出参数,输入输出参数)

可以在存储过程创建的时候加入参数,

创建存储过程定义的参数叫形式参数,create procedure 存储名称(形式参数)

调用的时候添加的参数叫做实际参数call 存储名称(实际参数)

第一种:输入参数  delimiter $$ CREATE PROCEDURE proc2(in in_name VARCHAR(20)) BEGIN INSERT INTO t3 (NAME)VALUES(in_name); END$$ delimiter ; CALL proc2('wwy');

 

第二种:输出参数 delimiter $$ CREATE PROCEDURE proc3(in in_id INT,OUT out_name varchar(20)) BEGIN SELECT NAME INTO out_name FROM t3 where id=in_id; END$$ delimiter ; CALL proc3(2,@dest); SELECT @dest; ##select 字段或聚合函数 into +输出参数名称 from 表名 where 条件 ##输出参数的值一般是一个确定的值,多个会报错

单个案例举例,针对存储过程的输出参数,如果是2个值,可能不可以实现,

必须是只有1个特定的值

第三种:输入输出参数

输入输出参数首先需要满足出入的和输出的数据类型是一致的!! 比如都为int数字 或者都为varchar

delimiter $$ CREATE PROCEDURE proc4(INOUT i INT) BEGIN SELECT COUNT(name) INTO i FROM t3 where id>i; END$$ delimiter ; SET a=5; CALL proc4(@a); SELECT @a;

五、存储过程中的条件与循环语句 第一种:if条件的存储过程 delimiter $$ CREATE PROCEDURE proc5(IN in_id INT) BEGIN DECLARE m INT; SET m=in_id; IF m>=4 THEN UPDATE t3 SET grade='good'; ELSE UPDATE t3 SET grade='bad'; END if; END$$

 

第二种:while循环的存储过程  mysql> delimiter $$ mysql> create procedure proc6() -> begin -> declare m int; -> set m=1; -> create table t4(id int primary key auto_increment,name varchar(20)); -> while m insert into t4(name)values(concat('student',m)); -> set m=m+1; -> end while; -> end$$

六、如何一次性往数据库中插入上万条数据?

有两种方式 存储过程和shell脚本

第一种存储过程实现上万数据插入

一百万条数据  用时50秒

第二种shell脚本实现上万数据插入

 shell脚本需要耗时比较久,有大量的IO操作,cpu的平均负载非常高



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3