第10节-MySQL数据库的编程基础()

 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();
————————

 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();