本文部分内容抄自作者:小孩子4919

自定义变量

Mysql中支持自定义变量,但是为了区分使用@进行标识,例如:

  1. // 将@a 赋值为1
  2. set @a = 1;
  3. // 查找@a的值
  4. select @a;
  5. // 在函数中定义变量要使用关键字declare
  6. declare name varchar(40);
  7. set name = '十一'
  8. //直接命名也可以
  9. declare name varchar(40) '十一'

delimiter 关键字

平常在Mysql命令行中我门执行一条这样的Sql:

  1. select * from user where id = 1;

最后都会使用“;”来表示一条语句结束。Mysql提供了delimiter关键字,就是用来指定这个结束符号的。例如我们可以自定义一个结束符号:

  1. // 这里我们定义了两个$$来表示结束符号
  2. delimiter $$
  3. // 这里用两个$$,这条Sql才会被执行
  4. select * from user where id = 1$$

存储函数

Mysql创建一个函数和其它语言创建类似,格式为:

  1. CREATE FUNCTION 存储函数名称([参数列表])
  2. RETURNS 返回值类型
  3. BEGIN
  4. 函数体内容
  5. END

案例:创建一个函数

  1. // 统计某门学科的平均分
  2. mysql> delimiter $
  3. mysql> CREATE FUNCTION avg_score(s VARCHAR(100))
  4. -> RETURNS DOUBLE
  5. -> BEGIN
  6. -> RETURN (SELECT AVG(score) FROM student_score WHERE subject = s);
  7. -> END $
  8. // 恢复结束符
  9. mysql> delimiter ;

调用一个函数

  1. SELECT avg_score('母猪的产后护理');

查询存储函数

  1. // 使用like关键字模糊匹配
  2. SHOW FUNCTION STATUS [LIKE 需要匹配的函数名]
  3. // 或者知道某个名称直接查就行
  4. SHOW CREATE FUNCTION 函数名

删除存储函数

  1. DROP FUNCTION 函数名

条件语句

判断语句

  1. IF 布尔表达式 THEN
  2. 处理语句
  3. [ELSEIF 布尔表达式 THEN
  4. 处理语句]
  5. [ELSE
  6. 处理语句]
  7. END IF;

循环语句

  1. WHILE 布尔表达式 DO
  2. 循环语句
  3. END WHILE;

案例:循环插入

  1. delimiter ;;
  2. create procedure idata() -- 创建存储过程,名称是idata
  3. begin
  4. declare i int;
  5. set i=1;
  6. while(i<=100000)do
  7. insert into t values(i, i, i); -- 循环插入100000
  8. set i=i+1;
  9. end while;
  10. end;;
  11. delimiter ;
  12. call idata(); -- 调用存储过程
  13. DROP PROCEDURE IF EXISTS `idata` -- 如果idata存储过程存在就删除