#用户变量
#set @<变量名称1>=<表达式1>[,@.....];
#例:
#set @name=1;
#(重新赋值)
#set @name='admin';
#set @name=25+5'
#set @name=@name+5;
#set @name=(select 客户姓名 from 客户信息 where 客户ID=5);
#查看变量:
#select @name;
#select * from 客户信息 where 客户姓名=@name;
#系统变量(全局系统变量/会话系统变量--只对当前会话有效)
#启动时就被引用并初始化为默认值
#以@@开头
#查看所有系统变量
show Variables;
#查询全局变量 version的值
select @@version;
#局部变量(先定义后使用) begin...end
#只在begin...end中间才有意义,超过范围则没有意义
#声明一个变量(declare),并赋值
#begin declare name varchar(20) set name=50 end
#定义局部变量name 数据类型为 varchar(16)
begin declare name varchar(16) set name='李四' end;
#定义用户变量 name
set @name='李家旗';
#查询全局变量 version的值
select @@version;
#定义局部变量name 数据类型为 varchar(16)
begin declare name varchar(16) set name='李四' end;
#if...Then...Else 用于条件判断
#if <条件表达式1> Then <语句块1>
#[Elseif <条件表达式2> Then <语句块2>]
#[Else <语句块3>]
#[End if]
#例:
begin
declare a int,b int,c int;
set a=12,b=15;
if a>b then c=a;
elseif a<b then c=b;
else c=0;
select c;
end if;
select c;
end;
#Case语句 用于将某个表达式与一组简单表达式进行比较以确定其返回值
#case <条件表达式>
#when <表达式1> then set <SQl语句1>
#when <表达式2> then set <SQl语句2>
#...
#when <表达式n> then set <SQl语句n>
#[Else set <其他SQL语句>]
#End Case;
#例:使用Case语句,根据成绩等级level的值(ABCDE),设置变量grade相应的值(优秀,良好,中等,及格,不及格)
case
when level='A' then set grade='优秀';
when level='B' then set grade='良好';
when level='C' then set grade='中等';
when level='D' then set grade='及格';
when level='E' then set grade='不及格';
else set grade='超出范围';
end case;
#或者:
case level
when 'A' then set grade='优秀';
when 'B' then set grade='良好';
when 'C' then set grade='中等';
when 'D' then set grade='及格';
when 'E' then set grade='不及格';
else set grade='超出范围';
end case;
#while循环语句
#[开始标注:]
#while <逻辑表达式> Do
# <语句块>
#End While [结束标注];
#例题:使用循环语句实现1+2+...+10
set i=0;
set s=0;
while i <10 do
set i=i+1;
set s=s+i;
end while;
#Loop循环语句,必须遇到Leave语句才能停止
set i=0;
set s=0;
L1:Loop
set i=i+1;
set s=s+i;
if i>=10 then
leave L1;
end if;
end Loop L1;
#Iterate语句用于跳出本次循环,直接进入下次循环
#多行注释
/*
...
...
...
*/
#练习:[存储过程]
#为用户变量name赋值"人民邮电出版社"
set @name="人民邮电出版社";
#从数据表“出版社信息”中查询“人民邮电出版社”的“出版社ID”字段的值,并且将该值存储在用户变量id中
set @id=(select 出版社ID from 出版社信息 where 出版社名称="人民邮电出版社");
#从数据表“图书信息”中查询“人民邮电出版社”出版的图书种类数量,并且将图书种类数量存储在用户变量num中
set @num=(select count(图书名称) as 图书种类数量 from 图书信息 where 出版社=@id);
#显示用户变量name、id和num的值
select @name,@id,@num;
#Delimiter 命令 用于更改MySQL语句的结束
#例:将结束符;改为$$
#Delimiter $$
#创建存储过程
#create procedure <存储过程名>([<参数列表>])
#调用存储过程
#call <存储过程名>([<参数列表>])
#修改 alter procedure 通常用于更改存储过程的特定属性
#存储过程练习
delimiter $$
create PROCEDURE p01()
begin
declare name varchar(18);
declare id varchar(10);
declare num varchar(6);
set name="人民邮电出版社";
set id=(select 出版社ID from 出版社信息 where 出版社名称="人民邮电出版社");
set num=(select count(图书名称) as 图书种类数量 from 图书信息 where 出版社=id);
select name,id,num;
end$$
delimiter ;
#调用存储过程
call p01;
#查询
show procedure status like 'p01';
show create procedure p01;
#修改 alter procedure
#alter procedure p01 SQL security definer;
#删除存储过程片
drop procedure p01;
#创建存储过程p02,求1-10的累加和
delimiter $$
create procedure p02()
begin
declare i int,s int;
set i=0;
set s=0;
while i <10 do
set i=i+1;
set s=s+i;
end while;
end$$
delimiter ;