存储过程是什么?
存储过程(Stored Procedure)是一种在数据库中存储复杂程序,以便外部程序调用的一种数据库对象。
存储过程是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。
存储过程思想上很简单,就是数据库 SQL 语言层面的代码封装与重用。
存储过程怎么用?
一、先学习基本语法
MYSQL 存储过程中的关键语法
声明语句结束符,可以自定义:
DELIMITER $$或
DELIMITER //
声明存储过程:
CREATE PROCEDURE demo_in_parameter(IN p_in int)
存储过程开始和结束符号:
BEGIN .... END
变量赋值:
SET @p_in=1
变量定义:
DECLARE l_int int unsigned default 4000000;
创建mysql存储过程、存储函数:
create procedure 存储过程名(参数)
存储过程体:
create function 存储函数名(参数)
2、存储过程简单的操作
2.1、先创建表
mysql> use demo_hu
Database changed
mysql> CREATE TABLE `users` (
-> `ID` int(11) NOT NULL AUTO_INCREMENT,
-> `NAME` varchar(100) DEFAULT NULL,
-> `EMAIL` varchar(100)DEFAULT NULL,
-> `AGE` int(11) DEFAULT NULL,
-> `SEX` varchar(100)DEFAULT NULL,
-> `ID_CARD` varchar(100)DEFAULT NULL,
-> `MOBILE_PHONE` varchar(100)DEFAULT NULL,
-> `VISA_CARD` varchar(100)DEFAULT NULL,
-> `OFFICER_CARD` varchar(100)DEFAULT NULL,
-> `ADDRESS` varchar(100)DEFAULT NULL,
-> PRIMARY KEY (`ID`) USING BTREE
-> ) ;
Query OK, 0 rows affected (0.02 sec)
mysql> select * from users;
Empty set (0.00 sec)
2.2、存储过程插入数据
示例:批量插入
DROP PROCEDURE IF EXISTS pro_users;
DELIMITER &&
CREATE PROCEDURE pro_users(IN inr int)
BEGIN
DECLARE i INT DEFAULT 0;
START TRANSACTION;
WHILE i<inr DO
INSERT INTO USERS(id, NAME,EMAIL,AGE,SEX,ID_CARD,MOBILE_PHONE) values(i,'曹植','liuhuyuan@163.com',29,'男','131081197803061637',13663776677);
commit;
SET i=i+1;
END WHILE;
COMMIT;
END; &&
call pro_users(1000);
执行后查询结果:插入999条数据
mysql> select count(*) from users;
+----------+
| count(*) |
+----------+
| 999 |
+----------+
1 row in set (0.01 sec)
DROP PROCEDURE IF EXISTS pro_users;
DELIMITER &&
CREATE PROCEDURE pro_users(IN inr int)
BEGIN
DECLARE i INT DEFAULT 0;
START TRANSACTION;
WHILE i<inr DO
INSERT INTO users(id, NAME,EMAIL,AGE,SEX,ID_CARD,MOBILE_PHONE,VISA_CARD,OFFICER_CARD,ADDRESS) values(i,'曹植','liuhuyuan@163.com',29,'男','131081197803061637',13663776677,'SYP618183458', '军字第00111209号', '北京市朝阳区立水桥北');
commit;
SET i=i+1;
END WHILE;
COMMIT;
END; &&
call pro_users(1000);
2.3、存储过程查询数据
#查询1条
DELIMITER &&
CREATE PROCEDURE select_users(IN p_id int)
BEGIN
SELECT * from users where id=p_id;
END; &&
call select_users(2)
#查询所有
DELIMITER &&
CREATE PROCEDURE select_users_all()
BEGIN
SELECT * from users;
END; &&
call select_users_all()