存储过程实例
前提准备
- 创建表
create table table1(name varchar(10));
create table Matches(
id int(10) auto_increment not null,
MATCHNO int(5) not null,
TEAMNO Varchar(6) not null,
PLAYERNO int(7) not null ,
WON Int(8) not null,
LOST varchar(2),
primary key(id));
create table Players(
id int(10) Auto_Increment Not null Primary Key,
name varchar(20) Not null,
age varchar(4) not null,
gender varchar(4));
- 向3张表创建数据
insert into table1 values(78);insert into table1 values('ls');
insert into players values(1,'lsq',22,'男');insert into Players values(2,'lqq',23,'女');
insert into Matches values(1,5,6,3,8,9); insert into Matches values(2,2,3,4,3,8);
实例
创建存储过程
Delimiter //
CREATE PROCEDURE first_proc()
BEGIN
drop table table1;
drop table Players;
drop table Matches;
create table table1(name varchar(10));
create table Players(
id int(10) Auto_Increment Not null Primary Key,
name varchar(20) Not null,
age varchar(4) not null,
gender varchar(4));
create table Matches(
id int(10) Auto_Increment Not null,
MATCHNO int(5) Not null,
TEAMNO Varchar(6) not Null,
PLAYERNO int(7) Not null ,
WON Int(8) not null,
LOST varchar(2),
Primary Key(id));
insert into table1 values(78);insert into table1 values('ls');
insert into Players values(1,'lsq',22,'男');insert into Players values(2,'lqq',23,'女');
insert into Matches values(1 ,5,6,3,8,9); insert into Matches values(2,2,3,4,3,8);
select * from table1;
select * from Players;
select * from Matches;
end;
//
Delimiter ;
执行
call first_proc;
删除存储过程
drop procedure first_proc
语法说明
基本语法
存储过程结构体:
存储过程体包含了在过程调用时必须执行的语句,例如:dml、ddl语句,if-then-else和while-do语句、声明变量的declare语句等
过程体格式:以begin开始,以end结束(可嵌套)
BEGIN
BEGIN
BEGIN
statements;
END
END
END
#存储过程变量的声明和使用
DROP PROCEDURE IF EXISTS test; -- 如果存在指定存储过程则删除它
DELIMITER // -- 定义存储过程结束符 这里的结束符为//,
CREATE PROCEDURE test() --
BEGIN -- 过程体 开始
DECLARE aa VARCHAR(20); -- 定义变量
DECLARE bb INT DEFAULT 0; -- 定义int 类型变量 默认为0;
SET aa = '张三'; -- 变量赋值
SELECT aa; -- 输出变量
SELECT bb; -- 存储过程结束出变量
END// 过程体 结束
CALL test(); -- 调用存储过程
while 循环
循环插入10条数据
drop PROCEDURE if EXISTS second_proc -- 如果存在就删除
Delimiter //
CREATE PROCEDURE second_proc(in total int)
begin
declare beginNumber INT default 0;
while beginNumber<=total DO -- 循环开始
insert into table1 values(CONCAT('ls',beginNumber));
set beginNumber = beginNumber+1;
end while; -- 循环结束
end;
//
Delimiter ;
call second_proc(10); -- 调用
循环控制(if-else)
#存储过程流程控制语句使用
DROP PROCEDURE IF EXISTS test_2;
DELIMITER //
CREATE PROCEDURE test_2()
BEGIN
DECLARE aa INT; # 定义变量
DECLARE bb INT; # 定义变量
SET aa = 20; # 变量赋值
SET bb = 20; # 变量赋值
IF aa > bb THEN # 判断
SELECT aa;
ELSEIF aa < bb THEN # else if 可以有多个
SELECT bb;
ELSE # else 只能存在一个
SELECT aa+bb;
END IF; # 结束if 语句
END//
CALL test_2(); # 调用存储过程