10.1、变量、运算符介绍
用户变量:使用@开头。【set定义,会话有效】
系统变量:使用@@开头。【declare定义,begin..end有效】
局部变量: 在存储过程中有效。
-- 1、用户变量使用方法
set @sno=95001;
select @sno; -- 查询设置的用户变量
-- 设置变量且定义默认值
select @name:='张三';
-- 查询并且设置值
select sname into @name from student where sno=@sno;
select @name;
-- 2、局部变量
delimiter $$
create procedure proc_add(in a int,in b int)
begin
-- 局部变量
declare c int default 0;
set c=a+b;
select c as 'result';
end$$
delimiter ;
call proc_add(2,3);
-- 3、系统变量:session变量和gobal变量
set @@wait_timeout=10000; --会话变量
set SESSION wait_timeout=10000; --会话变量
set @@global.wait_timeout=10000; --全局变量
set GLOBAL wait_timeout=10000; --全局变量
select @@wait_timeout -- 查询设置值
-- 查询所有会话变量
show session variables;
-- 查询所有全局变量
show global variables;
-- 4、常量:指的就是值不变的变量
-- 5、字符串常量
-- 5、数值常量
-- 6、日期时间常量
-- 7、布尔常量
-- 8、NULL常量
-- 9、运算符和表达式
运算符是执行数学运算﹑字符串连接以及列﹑常量和变量之间进行比较的符号。
9.1、算术运算符: +、- 、* 、/、%
9.2、赋值运算符:=、:=
9.3、逻辑运算符: !( NOT ) 、&&(AND ) 、||( OR ) 、XOR
9.4、位运算符: &、 ^ 、<< 、 >> ﹑~
9.3、比较运算符: =、<>(!=) 、<=> 、<、<=、>、>= 、IS NULL
【例】运算符和表达式使用示例
SET @x= 5,@y = 3;
SET @x=@x +@y;
SELECT @x;
10.2、流程控制
10.2.1、if
-- 如果有填写则显示,没有填写则显示0
select sname,if(age,age,'0') from student;
10.2.2、ifnull
-- 双目运算符,如果字段为null,则显示指定的内容
select sname,ifnull(birthday,'无填写') from student;
10.2.3、if...else【只能用于存储过程】
-- if...else 判断年龄是否成年人
delimiter $$
create procedure query_age(in var_sno int)
begin
declare temp int;
select age into temp from student where sno=var_sno;
if temp>=18 then
select '成年人';
else
select '未成年人';
end if;
end$$
delimiter ;
10.2.4、if...elseif...else
-- 判断成绩等级
drop procedure query_age;
delimiter $$
create procedure query_age(in var_sno varchar(32))
begin
declare temp int;
declare grade_desc varchar(32);
select score into temp from student where sno=var_sno;
if temp<60 then
set grade_desc='不及格';
elseif temp>=90 then
set grade_desc='优秀';
elseif temp>=60 and temp<=79 then
set grade_desc='及格';
elseif temp>=80 and temp<=89 then
set grade_desc='良好';
else
set grade_desc='未知';
end if;
select grade_desc;
end$$
delimiter ;
call query_age('95005');
10.2.5、case
-- case 性别:男为1,女为0
select sname,ssex,
case ssex
when '男' then 1
when '女' then 0
else '未知'
end as ssex_num
from student;
10.3、循环语句
10.3.1、while
-- while 输入1和100的和
delimiter $$
create procedure doWhile()
begin
declare count int default 1;
declare sum int default 0;
while count<=100 do
set sum=sum+count;
set count=count+1;
end while;
select sum;
end$$
delimiter ;
10.3.2、loop、leave
-- loop 输入1和100的和
-- leave 相当于break
delimiter $$
create procedure doWhile()
begin
declare count int default 1;
declare sum int default 0;
add_num:loop
set sum=sum+count;
if count>=100 then
leave add_num;
end if;
set count=count+1;
end loop add_num;
select sum;
end$$
delimiter ;
10.3.3、loop、iterate
-- loop 输入1和100能被3整除的和
-- leave 相当于break
-- iterate 相当于continue
drop procedure doWhile;
delimiter $$
create procedure doWhile()
begin
declare count int default 1;
declare sum int default 0;
add_num:loop
set count=count+1;
if count=100 then
leave add_num;
else if mod(count,3)=0 then
iterate add_num;
end if;
end if;
set sum=sum+count;
end loop add_num;
select sum;
end$$
delimiter ;
call doWhile();
10.3.4、repeat
-- repeat 输入1和100能被3整除的和
drop procedure doWhile;
delimiter $$
create procedure doWhile()
begin
declare count int default 0;
declare sum int default 0;
add_num:repeat
set count=count+1;
set sum=sum+count;
until count>=100
end repeat add_num;
select sum;
end$$
delimiter ;
call doWhile();
10.4、实践:利用循环,批量插入1000条数据
create table user(
id int primary key auto_increment,
uname varchar(32)
);
drop procedure add_user;
delimiter $$
create procedure add_user()
begin
declare count int default 1;
while count<=1000 do
insert into user(uname) values(concat('zhangsan',cast(count as unsigned)));
set count=count+1;
end while;
end$$
delimiter ;
call add_user();