本文部分内容抄自作者:小孩子4919
自定义变量
Mysql中支持自定义变量,但是为了区分使用@进行标识,例如:
// 将@a 赋值为1
set @a = 1;
// 查找@a的值
select @a;
// 在函数中定义变量要使用关键字declare
declare name varchar(40);
set name = '十一'
//直接命名也可以
declare name varchar(40) '十一';
delimiter 关键字
平常在Mysql命令行中我门执行一条这样的Sql:
select * from user where id = 1;
最后都会使用“;”来表示一条语句结束。Mysql提供了delimiter关键字,就是用来指定这个结束符号的。例如我们可以自定义一个结束符号:
// 这里我们定义了两个$$来表示结束符号
delimiter $$
// 这里用两个$$,这条Sql才会被执行
select * from user where id = 1$$
存储函数
Mysql创建一个函数和其它语言创建类似,格式为:
CREATE FUNCTION 存储函数名称([参数列表])
RETURNS 返回值类型
BEGIN
函数体内容
END
案例:创建一个函数
// 统计某门学科的平均分
mysql> delimiter $
mysql> CREATE FUNCTION avg_score(s VARCHAR(100))
-> RETURNS DOUBLE
-> BEGIN
-> RETURN (SELECT AVG(score) FROM student_score WHERE subject = s);
-> END $
// 恢复结束符
mysql> delimiter ;
调用一个函数
SELECT avg_score('母猪的产后护理');
查询存储函数
// 使用like关键字模糊匹配
SHOW FUNCTION STATUS [LIKE 需要匹配的函数名]
// 或者知道某个名称直接查就行
SHOW CREATE FUNCTION 函数名
删除存储函数
DROP FUNCTION 函数名
条件语句
判断语句
IF 布尔表达式 THEN
处理语句
[ELSEIF 布尔表达式 THEN
处理语句]
[ELSE
处理语句]
END IF;
循环语句
WHILE 布尔表达式 DO
循环语句
END WHILE;
案例:循环插入
delimiter ;;
create procedure idata() -- 创建存储过程,名称是idata
begin
declare i int;
set i=1;
while(i<=100000)do
insert into t values(i, i, i); -- 循环插入100000次
set i=i+1;
end while;
end;;
delimiter ;
call idata(); -- 调用存储过程
DROP PROCEDURE IF EXISTS `idata` -- 如果idata存储过程存在就删除