5. MySQL编程基础

caid

分类: DataBase、学习笔记 34 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):

leave 循环标签;

iterate语句(跳出当前循环,继⽽进⾏下次循环。相当于java语⾔中的continue):

iterate 循环标
repeat语句

当条件表达式的值为false时,反复执⾏循环,直到条件表达式的值为true

[循环标签:]repeat
循环体;
until条件表达式
end repeat [循环标签];

系统函数

mysql提供了所有常⻅函数,⽐如三⻆函数、字符串处理函数、⽇期处理函数、类型转换函数
等,需要时请⾃⾏查询

  • 0人 Love
  • 1人 Haha
  • 0人 Wow
  • 0人 Sad
  • 0人 Angry
Mysql、数据库

作者简介: caid

共 2 条评论关于 “5. MySQL编程基础”

Loading...