MySQL语句:
一、变量
在mysql文档中,mysql变量可分为两大类,即系统变量和用户变量。
但根据实际应用又被细化为四种类型,即局部变量、用户变量、会话变量和全局变量。
mysql局部变量,只能用在begin/end语句块中,比如存储过程中的begin/end语句块。其作用域仅限于该语句块。
-- declare语句专门用于定义局部变量,可以使用default来说明默认值 -- DECLARE 变量名 [,variable_name...] 数据类型 [DEFAULT value]; declare age int default 0; -- 局部变量的赋值方式一 -- SET 变量名 = 表达式值 [,variable_name = expression ...] set age=18; -- 局部变量的赋值方式二 select StuAge into age from demo.student where StuNo='A001';
mysql用户变量,mysql中用户变量不用提前申明,在用的时候直接用“@变量名”使用就可以了。其作用域为当前连接。
1 -- 第一种用法,使用set时可以用“=”或“:=”两种赋值符号赋值 2 set @age=19; 3 4 set @age:=20; 5 6 -- 第二种用法,使用select时必须用“:=”赋值符号赋值 7 select @age:=22; 8 9 select @age:=StuAge 10 from demo.student 11 where StuNo='A001';
mysql会话变量,服务器为每个连接的客户端维护一系列会话变量。其作用域仅限于当前连接,即每个连接中的会话变量是独立的。
1 -- 显示所有的会话变量 2 show session variables; 3 4 -- 设置会话变量的值的三种方式 5 set session auto_increment_increment=1; 6 set @@session.auto_increment_increment=2; 7 set auto_increment_increment=3; -- 当省略session关键字时,默认缺省为session,即设置会话变量的值 8 9 -- 查询会话变量的值的三种方式 10 select @@auto_increment_increment; 11 select @@session.auto_increment_increment; 12 show session variables like '%auto_increment_increment%'; -- session关键字可省略 13 14 -- 关键字session也可用关键字local替代 15 set @@local.auto_increment_increment=1; 16 select @@local.auto_increment_increment;
mysql全局变量,全局变量影响服务器整体操作,当服务启动时,它将所有全局变量初始化为默认值。要想更改全局变量,必须具有super权限。其作用域为server的整个生命周期。
1 -- 显示所有的全局变量 2 show global variables; 3 4 -- 设置全局变量的值的两种方式 5 set global sql_warnings=ON; -- global不能省略 6 set @@global.sql_warnings=OFF; 7 8 -- 查询全局变量的值的两种方式 9 select @@global.sql_warnings; 10 show global variables like '%sql_warnings%';
二、流程控制语句
1、区块定义
[lable:]begin statement end [label];
2、条件语句
if 条件 then statement
elseif 条件 then
statement
else statement
end if;
case -- 条件开始 when 条件 then statement; when 条件 then statement; else statement; end case; -- 条件结束
3、循环语句
-
while循环
[label:] WHILE expression DO statements END WHILE [label] ;
-
loop循环
[label:] LOOP statements
--leave [label]
-- 结束
循环
--iterate
END LOOP [label];[label] -- 结束本次循环
-
repeat until循环
[label:] REPEAT statements UNTIL expression END REPEAT [label] ;
三、函数
函数存储着一系列sql语句,调用函数就是一次性执行这些语句,但是只能返回一个值。
自定义函数分为二种,一种是标量值函数,另一种是表格值函数
1、 标量值函数 :返回一个标量值
Create function 函数名(参数) Returns 返回值数据类型 as begin SQL语句(必须有return 变量或值) End
-- 创建函数 CREATE FUNCTION MySTR(@strs VARCHAR(50)) RETURNS VARCHAR(50) AS BEGIN DECLARE @str2 VARCHAR(30) SET @str2=@strs DECLARE @str3 VARCHAR(30) SET @str3=(select name from userinfo where huji=dbo.MySTR('邯郸') and id=23 ) RETURN @str2 END -- 调用函数 SELECT dbo.MySTR('aa') AS result
2、表格值函数 ,表格值函数有二种(内联表格值函数,多句表格值函数)
-
内联表格值函数:返回一个表格
create function 函数名(参数)returns table as return(一条SQL语句)
-- 创建函数 CREATE FUNCTION tabcmess(@title VARCHAR(10)) RETURNS TABLE AS return(select title,des from product where title like '%'+@title+'%') -- 调用 SELECT * FROM tabcmess('aaa')
-
多句表格值函数
create function 函数名(参数) returns 表格变量名 table(表格变量定义) as begin SQL语句 end
-- 创建函数 CREATE function tabcmessalot (@title varchar(10)) Returns @ctable table(title varchar(10) null,des varchar(100) null) As Begin Insert @ctable Select title,des from product WHERE title LIKE '%'+@title+'%' return End -- 调用函数 SELECT * FROM tabcmessalot('aaa')
四、存储过程
存储过程简单来说,就是为以后的使用而保存的一条或多条 MySQL 语句的集合
delimiter // 一般情况下MYSQL以;结尾表示确认输入并执行语句,但在存储过程中;不是表示结束,因此可以用该命令将;号改为//表示确认输入并执行。
1、创建存储过程
-- 创建存储过程
create procedure sp_name(in 输入变量名 数据类型,out 输出变量名 数据类型,inout 输入输出变量名 数据类型
) begin ......... end
2、调用存储过程
call sp_name([输入参数], [@输出变量名])-- 调用存储过程
select @输出变量名-- 显示过程输出结果
3、删除存储过程
drop procedure sp_name
4、其他命令
-- 显示存储过程 SHOW PROCEDURE STATUS; -- 显示特定数据库的存储过程 SHOW PROCEDURE status where db = 'schooldb'; -- 显示特定模式的存储过程 SHOW PROCEDURE status where name like '%my%'; -- 显示存储过程“mypro1”的源码 SHOW CREATE PROCEDURE mypro1;