mysql存储过程

啥是存储过程?
解:存储过程是一种在数据库中存储复杂程序,方便外部程序去调用的一种数据库对象。
为啥要写存储过程?
解:你问俺为啥要写存储过程,俺只想说是为了方便测试,提高效率。(这只是对自己目前可以用到的地方来说啦)

------ 下面来正经说一下为啥要写存储过程啦 ------

写存储过程是为了完成特定功能的sql语句集,经过编辑创建并且保存在数据库中,用户可以通过指定存储过程的名字并且给定相关的参数来调用执行(有些存储过程是有参数的,有些则是没有参数的)。存储过程是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。
写存储过程有啥优缺点呢?
解:
优点:
存储过程可封装,并隐藏复杂的商业逻辑。
存储过程可以回传值,并可以接受参数。
存储过程无法使用 SELECT 指令来运行,因为它是子程序,与查看表,数据表或用户定义函数不同。
存储过程可以用在数据检验,强制实行商业逻辑等。
缺点:
存储过程,往往定制化于特定的数据库上,因为支持的编程语言不同。当切换到其他厂商的数据库系统时,需要重写原有的存储过程。
存储过程的性能调校与撰写,受限于各种数据库系统。

如何去创建一个存储过程?
创建存储过程:
CREATE
[DEFINER = { user | CURRENT_USER }]
 PROCEDURE sp_name ([proc_parameter[,…]])
[characteristic …] routine_body

proc_parameter:
[ IN | OUT | INOUT ] param_name type

characteristic:
COMMENT ‘string’
| LANGUAGE SQL
| [NOT] DETERMINISTIC
| { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
| SQL SECURITY { DEFINER | INVOKER }

routine_body:
  Valid SQL routine statement

[begin_label:] BEGIN
  [statement_list]
    ……
END [end_label]

mysql存储过程中的关键语法:
DELIMITER $$ 或 DELIMITER //
也可以定义其他的符号
注意:当使用DELIMITER命令时,应该避免使用反斜杠(\)字符,因为反斜杠是MYSQL的转义字符!!!
如果使用了会报错

声明存储过程:
CREATE PROCEDURE test_in_parameter(IN p_in int)

存储过程开始和结束符号:
BEGIN … END

变量赋值:
SET @p_in=1

变量定义:
DECLARE j int unsigned default 4000000;

创建mysql存储过程:
create procedure 存储过程名(参数)
注:可以没有参数

下面写一个例子:
首先有一个数据库
CREATE TABLE students (
id int(11) NOT NULL AUTO_INCREMENT,
t_name varchar(255) CHARACTER SET utf8mb4 NOT NULL,
age int(11) DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

创建了数据库之后,向这个表里去批量插入一些数据
DELIMITER // – 使用DELIMITER 把语句结束符号修改为 //
CREATE PROCEDURE test_insert(IN j INT)
BEGIN
DECLARE i INT DEFAULT 0; – 定义一个局部变量(这里不做详细说明,后面会介绍)
WHILE i<j DO
INSERT INTO students(t_name,age) VALUES (CONCAT(‘a’,i),i);
SET i = i + 1;
END WHILE;
END //
DELIMITER ; – 这里再把结束符号修改为;

CALL test_insert(10); – 调用存储过程

就上述例子做解释:
为什么使用DELIMITER(DELIMITER是分割符的意思)?
因为MySQL默认以”;”为分隔 符,如果我们没有声明分割符,那么编译器会把存储过程当成SQL语句进行处理,则存储过程的编译过程会报错,所以要事先用DELIMITER关键字申明当 前段分隔符,这样MySQL才会将”;”当做存储过程中的代码,不会执行这些代码,用完了之后要把分隔符还原。

参数中的IN是做什么的?
这里的IN是输入参数,存储过程根据需要可能会有输入、输出、输入输出参数,这里有一个输入参数j,类型是int型,如果有多个参数用","分割开。
参数具体说明:
MySQL存储过程的参数用在存储过程的定义,共有三种参数类型,IN,OUT,INOUT,形式如:
CREATE PROCEDURE 存储过程名([[IN | OUT | INOUT ] 参数名 数据类形…])
IN 输入参数:表示该参数的值必须在调用存储过程时指定,在存储过程中修改该参数的值不能被返回,为默认值
OUT 输出参数:该值可在存储过程内部被改变,并可返回
INOUT输入输出参数:调用时指定,并且可被改变和返回

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值