5. MySQL编程基础
分类: DataBase、学习笔记 0 2
⽤户⾃定义变量
⽤户⾃定义变量分为⽤户会话变量(以@开头)以及局部变量(不以@开头)。
⽤户会话变量
MySQL客户机1定义了会话变量,会话期间,该会话变量⼀直有效;MySQL客户机2不能访问ySQL客户
机1定义的会话变量;MySQL客户机1关闭或者MySQL客户机1与服务器断开连接后,MySQL客户机1定
义的所有会话变量将⾃动释放,以便节省MySQL服务器的内存空间。
定义变量
set @user_variable1=expression1
select @user_variable1:=expression1
select expression1 into @user_variable1
查看变量
select @user_variable1
赋值
set @student_count = (select count(*) from student);
select @student_count := (select count(*) from student);
select @student_count:= count(*) from student;
select count(*) into @student_count from student;
使⽤变量
select * from student where student_no=@student_no;
局部变量
定义变量
declare variable type;
局部变量与⽤户会话变量的区别
- ⽤户会话变量名以“@”开头,⽽局部变量名前⾯没有“@”符号。
- 局部变量使⽤declare命令定义(存储过程参数、函数参数除外),定义时必须指定局部变量的数
据类型。局部变量定义后,才可以使⽤set命令或者select语句为其赋值。⽤户会话变量使⽤set命
令或者select语句定义并进⾏赋值,定义⽤户会话变量时⽆需指定数据类型(⽤户会话变量是弱类
型)。 - ⽤户会话变量的作⽤范围与⽣存周期⼤于局部变量。局部变量如果作为存储过程或者函数的参数使⽤,则在整个存储过程或函数内中有效;如果定义在存储程序的 begin-end语句块中,则仅在当前的begin-end语句块内有效。⽤户会话变量在本次会话期间⼀直有效,直⾄关闭服务器连接。
- 如果局部变量嵌⼊到SQL语句中,由于局部变量名前没有“@”符号,这就要求局部变量名不能与表字段名同名,否则将出现⽆法预期的结果。
运算符与表达式
算术运算符
+(加)、−(减)、*(乘)、/(除)、%(求余)div(求商)
⽐较运算符
=、>、<、>=、 <=、 <>、 is null、between...and...、 in like、regexp
逻辑运算符
not(!) 、and(&&)、 or(||)、 xor
begin-end语句块
相当于java语⾔中的{、}
begin-end语句块中,end后以“;”结束。
在每⼀个begin-end语句块中声明的局部变量,仅在当前的begin-end语句块内有效。
允许在⼀个begin-end语句块内使⽤leave语句跳出该语句块(leave语句的使⽤⽅法稍后讲解)。
重置命令结束标记
delimiter $$
例:
delimiter $$
select * from student where student_name = 'A'$$
delimiter ;
select * from student where student_name = 'A';
⾃定义函数
创建⾃定义函数的语法格式
create function函数名(参数1,参数2,…)returns返回值的数据类型
begin
[函数选项]
函数体;
return语句;
end;
- ⾃定义函数是数据库的对象,因此,创建⾃定义函数时,需要指定该⾃定义函数⾪属于哪个数据
库。 - 同⼀个数据库内,⾃定义函数名不能与已有的函数名(包括系统函数名)重名。建议在⾃定义函数名中统⼀添加前缀“fn”或者后缀“fn”。
- 函数的参数⽆需使⽤declare命令定义,但它仍然是局部变量,且必须提供参数的数据类型。⾃定
义函数如果没有参数,则使⽤空参数“()”即可。 - 函数必须指定返回值数据类型,且须与return语句中的返回值的数据类型相近(⻓度可以不同)。
函数选项:
contains sql:表示函数体中不包含读或写数据的语句(例如set命令等)。 no sql:表示函数体
中不包含SQL语句。 reads sql data:表示函数体中包含select查询语句,但不包含更新语句。
modifies sql data:表示函数体包含更新语句。 如果上述选项没有明确指定,默认是contains
sql。
例如下⾯的函数实现的功能是为查询结果集添加⾏号:
delimiter $$
create function row_no_fn() returns int
no sql
begin
set @row_no = @row_no + 1;
return @row_no;
end;
$$
delimiter ;
使⽤该函数:
set @row_no=0;
select row_no_fn()⾏号,name from student;
下⾯的例⼦实现根据学⽣的学号id查询学⽣的name
delimiter $$
create function get_name_fn(new_id int) returns char(20)
reads sql data
begin
declare student_name char(20);
select name into student_name from student where id=new_id;
return student_name1;
end;
$$
delimiter ;
使⽤:
select get_name_fn('2012001');
函数的维护
查看函数
show function status;
show function status like XXX;
删除函数
drop function 函数名;
条件控制语句
If(条件表达式1) then 语句块1;
[elseif条件表达式2 then语句块2] ...
[else语句块n]
end if;
或
case 表达式
when value1 then语句块1;
when value2 then语句块2;
when value3 then语句块3;
…
else语句块n;
end case;
循环语句
[循环标签:]while 条件表达式 do
循环体;
end while [循环标签];
leave语句(跳出当前循环,相当于java语⾔中的break):
循环体;
end while [循环标签];
leave 循环标签;
iterate语句(跳出当前循环,继⽽进⾏下次循环。相当于java语⾔中的continue):
iterate 循环标
repeat语句
当条件表达式的值为false时,反复执⾏循环,直到条件表达式的值为true
[循环标签:]repeat
循环体;
until条件表达式
end repeat [循环标签];
系统函数
mysql提供了所有常⻅函数,⽐如三⻆函数、字符串处理函数、⽇期处理函数、类型转换函数
等,需要时请⾃⾏查询
共 2 条评论关于 “5. MySQL编程基础”