⽤户⾃定义变量分为⽤户会话变量(以@开头)以及局部变量(不以@开头)。
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;
局部变量与⽤户会话变量的区别+(加)、−(减)、*(乘)、/(除)、%(求余)div(求商)
=、>、<、>=、 <=、 <>、 is null、between…and…、 in like、regexp
not(!) 、and(&&)、 or(||)、 xor
相当于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;
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 循环标
repeat语句当条件表达式的值为false时,反复执⾏循环,直到条件表达式的值为true
[循环标签:]repeat
循环体;
until条件表达式
end repeat [循环标签];
mysql提供了所有常⻅函数,⽐如三⻆函数、字符串处理函数、⽇期处理函数、类型转换函数 等,需要时请⾃⾏查询