MySQL5.x.x存储过程简单入门

存储过程是一种存储在数据库中的程序,就像是正规语言中的子程序。我们常用的操作数据库语言 SQL 语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的 SQL 语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数的话)来调用执行它。

MySQL 支持的“ routines(例程)”有两种:一种是我们说的存储过程, 另外一种是在其他 SQL 语句中可以返回值的函数,使用起来和 MySQL 预装载的函数一样,如 pi()。一个存储过程包括名字,参数列表,以及可以包括很多 SQL 语句的 SQL 语句集。

那么什么情况下需要用到存储过程呢?当你需要处理的是需要检查、循环、多语句但没有用户交互的重复性任务时,你就可以使用保存在服务器上的存储过程来完成。这样在执行任务的每一步时,服务器和客户端之间就没那么多的信息来往了。

想要在安装的 MySQL 上测试存储过程,必须得保证安装的 MySQL 版本是 5.0 以上,因为 5.0 之前的 MySQL版本不支持存储过程的功能,由于其它数据库都有存储过程,这使得 5.0 之前的 MySQL 版本的使用大打折扣。因此,自 MySQL 5.0 之后的版本加入了存储过程这一功能。所以在学习存储过程之前,先检查一下 MySQL 的版本。

Code   ViewPrint
  1. mysql> select version();  
  2. +———–+  
  3. | version() |  
  4. +———–+  
  5. | 5.7.4-m14 |  
  6. +———–+  
  7. 1 row in set (0.00 sec)  

或者用下面的语句也可以查询版本:

Code   ViewPrint
  1. mysql> show variables like ‘version’;  
  2. +—————+———–+  
  3. | Variable_name | Value     |  
  4. +—————+———–+  
  5. | version       | 5.7.4-m14 |  
  6. +—————+———–+  
  7. 1 row in set (0.00 sec)  

注意:MySQL 语句对大小写不敏感,因此语句也可以是大写的,比如 SELECT VERSION();

创建一个测试数据库 test,用来学习存储过程。

Code   ViewPrint
  1. mysql> create database test;  
  2. Query OK, 1 row affected (0.00 sec)  
  3.   
  4. mysql> use test;  
  5. Database changed  

在 test 数据库中,创建一张表 t,并插入一条简单的数据。

Code   ViewPrint
  1. mysql> create table t (s1 int);  
  2. Query OK, 0 rows affected (0.05 sec)  
  3.   
  4. mysql> insert into t values (5);  
  5. Query OK, 1 row affected (0.00 sec)  

接下来,选择分隔符。分隔符是通知 mysql 客户端,已经完成输入一个 SQL 语句的字符或字符串符号。一直以来,我们都使用分号“; ”,但在存储过程中,这会产生不少问题,因为存储过程中有许多语句,所以每一个都需要一个分号。因此需要选择一个不太可能出现在 SQL 语句或程序中的字符串作为分隔符。比如“|”、“@”、“//”等。在这里就使用“//”。设置分隔符的 SQL 语句如下:
mysql> delimiter //

下面,关键的时刻来了,创建第一个存储过程吧。

Code   ViewPrint
  1. mysql> create procedure p1 () select * from t;//  
  2. Query OK, 0 rows affected (0.00 sec)  

解释上面的存储过程:

创建存储过程的关键字是 create procedure,存储过程名是 p1(备注:存储过程名就像 SQL 语句一样,对大小写不敏感,因此‘P1’和‘p1’是同一个名字,在同一个数据库中不能给两个存储过程取相同的名字,因为这样将会导致重载。某些DBMS允许重载(Oracle支持),但是MySQL不支持。 可以采取“数据库名.存储过程名”这样的折中方法,如“ test.p1”。存储过程名可以分开, 它可以包括空格符,其长度限制为 64 个字符,但注意不要使用 MySQL 内建函数的名字。),语句中 p1 后面的括号是参数列表,没有参数的情况下括号需保留。括号后到“//”前,是存储过程的主体。

接下来就调用上面创建的存储过程。

Code   ViewPrint
  1. mysql> call p1 ()//  
  2. +——+  
  3. | s1   |  
  4. +——+  
  5. |    5 |  
  6. +——+  
  7. 1 row in set (0.00 sec)  
  8.   
  9. Query OK, 0 rows affected (0.00 sec)  

反映存储过程特性的子句——特征子句。

Code   ViewPrint
  1. mysql> create procedure p2()   
  2.     -> LANGUAGE SQL  /* 说明下面过程的主体使用SQL语言编写 */
  3.     -> NOT DETERMINISTIC  /* 传递给系统的信息 */
  4.     -> SQL SECURITY DEFINER  /* 详细解释继续向下看 */
  5.     -> COMMENT ‘A Procedure‘  /* 可选的注释说明 */
  6.     -> select CURRENT_DATE, RAND() from t//  
  7. Query OK, 0 rows affected (0.00 sec)  
  8.   
  9. mysql> call p2()//  
  10. +————–+———————+  
  11. CURRENT_DATE | RAND()              |  
  12. +————–+———————+  
  13. | 2015-01-31   | 0.19683208334895977 |  
  14. +————–+———————+  
  15. 1 row in set (0.00 sec)  
  16.   
  17. Query OK, 0 rows affected (0.00 sec)  

SQL SECURITY,可以定义为 SQL SECURITY DEFINER 或 SQL SECURITY INVOKER。 这就进入了权限控制的领域了。SQL SECURITY DEFINER 意味着在调用时检查创建过程用户的权限,SQL SECURITY INVOKER 意味着一直会检查用户的权限。使用 SQL SECURITY DEFINER 指令告诉 MySQL 服务器检查创建过程的用户就可以了,当过程已经被调用,就不检查执行调用过程的用户了。而SQL SECURITY INVOKER 则是告诉服务器在这一步仍然要检查调用者的权限。

现在,详细解释一下存储过程的参数。

Code   ViewPrint
  1. 1. CREATE PROCEDURE p() …  
  2. 2. CREATE PROCEDURE p([INname data-type) …  
  3. 3. CREATE PROCEDURE p(OUT name data-type) …  
  4. 4. CREATE PROCEDURE p(INOUT name data-type) …  

上面的参数中,IN 是可以省略的,因为存储过程如果有参数,默认为 IN。IN 输入参数,表示该参数的值必须在调用存储过程时指定,在存储过程中修改该参数的值不能被返回,还是为原来的值;OUT 输出参数,该值可以在存储过程内部被改变,并可返回;INOUT 输入输出参数,该值在调用时指定,在存储过程内部被改变后,可以返回,为改变后的值。下面看几个通俗易懂的详细例子。

IN 输入的例子:

Code   ViewPrint
  1. mysql> create procedure demo_in_parameter(IN p_in int)  
  2.     -> begin  
  3.     -> select p_in;  
  4.     -> set p_in=2;  
  5.     -> select p_in;  
  6.     -> end //  
  7. Query OK, 0 rows affected (0.00 sec)  
  8.   
  9. mysql> set @p_in=1 //  
  10. Query OK, 0 rows affected (0.00 sec)  
  11.   
  12. mysql> call demo_in_parameter(@p_in) //  
  13. +——+  
  14. | p_in |  
  15. +——+  
  16. |    1 |  
  17. +——+  
  18. 1 row in set (0.00 sec)  
  19.   
  20. +——+  
  21. | p_in |  
  22. +——+  
  23. |    2 |  
  24. +——+  
  25. 1 row in set (0.00 sec)  
  26.   
  27. Query OK, 0 rows affected (0.00 sec)  
  28. mysql> select @p_in //
  29. +——–+
  30. | @p_in |
  31. +——–+
  32. |         1 |
  33. +——–+
  34. 1 row in set (0.00 sec)

OUT 输出的例子:

Code   ViewPrint
  1. mysql> create procedure demo_out_parameter(OUT p_out int)  
  2.     -> begin  
  3.     -> select p_out;  
  4.     -> set p_out=2;  
  5.     -> select p_out;  
  6.     -> end //  
  7. Query OK, 0 rows affected (0.00 sec)  
  8.   
  9. mysql> set @p_out=1 //  
  10. Query OK, 0 rows affected (0.00 sec)  
  11.   
  12. mysql> call demo_out_parameter(@p_out) //  
  13. +——-+  
  14. | p_out |  
  15. +——-+  
  16. |  NULL |  
  17. +——-+  
  18. 1 row in set (0.00 sec)  
  19.   
  20. +——-+  
  21. | p_out |  
  22. +——-+  
  23. |     2 |  
  24. +——-+  
  25. 1 row in set (0.00 sec)  
  26.   
  27. Query OK, 0 rows affected (0.00 sec)  
  28. w
  29. mysql> select @p_out //
  30. +———-+ 
  31. | @p_out | 
  32. +———-+ 
  33. |           2 | 
  34. +———-+ 
  35. 1 row in set (0.00 sec) 

INOUT 输入输出的例子:

Code   ViewPrint
  1. mysql> create procedure demo_inout_parameter(INOUT p_inout int)  
  2.     -> begin  
  3.     -> select p_inout;  
  4.     -> set p_inout=2;  
  5.     -> select p_inout;  
  6.     -> end //  
  7. Query OK, 0 rows affected (0.00 sec)  
  8.   
  9. mysql> set @p_inout=1 //  
  10. Query OK, 0 rows affected (0.00 sec)  
  11.   
  12. mysql> call demo_inout_parameter(@p_inout) //  
  13. +———+  
  14. | p_inout |  
  15. +———+  
  16. |       1 |  
  17. +———+  
  18. 1 row in set (0.00 sec)  
  19.   
  20. +———+  
  21. | p_inout |  
  22. +———+  
  23. |       2 |  
  24. +———+  
  25. 1 row in set (0.00 sec)  
  26.   
  27. Query OK, 0 rows affected (0.00 sec)  
  28.   
  29. mysql> select @p_inout //  
  30. +———-+  
  31. | @p_inout |  
  32. +———-+  
  33. |        2 |  
  34. +———-+  
  35. 1 row in set (0.00 sec)  

在这里,顺便说一下 MySQL 存储过程的注释方式,主要有三种:

— 需要注释的部分:用于单行注释;

# 需要注释的部分:用于单行注释;

/* 需要注释的部分 */:用户多行注释;

注意:不管单行和多行的注释,如果把分隔符“//”写到注释中,则分隔符失效,需要在注释外重新写分隔符。另外,“–”和“#”的单行注释风格和 C 或 JAVA 等语言的“//”注释一样,不过最好在标记和被注释的内容间加个空格。

MySQL 存储过程中变量的声明和赋值:

用关键字 declare 声明变量,用 set 关键字给变量赋值。

MySQL 存储过程的控制语句:

1. 作用域问题。

Code   ViewPrint
  1. mysql> create procedure p11()  
  2.     -> begin  
  3.     -> declare xx char(5) default ‘outer‘;  
  4.     -> begin  
  5.     -> declare xx char(5) default ‘inner‘;  
  6.     -> select xx;  
  7.     -> end;  
  8.     -> select xx;  
  9.     -> end;  
  10.     -> //  
  11. Query OK, 0 rows affected (0.00 sec)  
  12.   
  13. mysql> call p11() //  
  14. +——-+  
  15. | xx    |  
  16. +——-+  
  17. inner |  
  18. +——-+  
  19. 1 row in set (0.00 sec)  
  20.   
  21. +——-+  
  22. | xx    |  
  23. +——-+  
  24. outer |  
  25. +——-+  
  26. 1 row in set (0.00 sec)  
  27.   
  28. Query OK, 0 rows affected (0.00 sec)  

2. 条件语句 IF…THEN… 和 IF…THEN…  ELSE…

Code   ViewPrint
  1. mysql> select * from t //  
  2. +——+  
  3. | s1   |  
  4. +——+  
  5. |    5 |  
  6. |    5 |  
  7. |    5 |  
  8. |    5 |  
  9. +——+  
  10. rows in set (0.00 sec)  
  11.   
  12. mysql> create procedure p12(IN pp int)  
  13.     -> begin  
  14.     -> declare vv int;  
  15.     -> set vv=pp+1;  
  16.     -> if vv=0 then   
  17.     -> insert into t values (17);  
  18.     -> end if;  
  19.     -> if pp=0 then  
  20.     -> update t set s1=s1+1;  
  21.     -> else   
  22.     -> update t set s1=s1+2;  
  23.     -> end if;  
  24.     -> end;  
  25.     -> //  
  26. Query OK, 0 rows affected (0.00 sec)  
  27.   
  28. mysql> select * from t //  
  29. +——+  
  30. | s1   |  
  31. +——+  
  32. |    6 |  
  33. |    6 |  
  34. |    6 |  
  35. |    6 |  
  36. +——+  
  37. rows in set (0.00 sec)  

3. case语句

Code   ViewPrint
  1. mysql> select * from t;//  
  2. +——+  
  3. | s1   |  
  4. +——+  
  5. |    6 |  
  6. |    6 |  
  7. |    6 |  
  8. |    6 |  
  9. +——+  
  10. rows in set (0.00 sec)  
  11.   
  12. mysql> create procedure p13(IN pp int)  
  13.     -> begin  
  14.     ->   declare vv int;  
  15.     ->   set vv = pp + 1;  
  16.     ->   case vv  
  17.     ->     when 0 then insert into t values(17);  
  18.     ->     when 1 then insert into t values(18);  
  19.     ->     else insert into t values (19);  
  20.     ->   end case;  
  21.     -> end;  
  22.     -> //  
  23. Query OK, 0 rows affected (0.00 sec)  
  24.   
  25. mysql> call p13(0)//  
  26. Query OK, 1 row affected (0.01 sec)  
  27.   
  28. mysql> select * from t//  
  29. +——+  
  30. | s1   |  
  31. +——+  
  32. |    6 |  
  33. |    6 |  
  34. |    6 |  
  35. |    6 |  
  36. |   18 |  
  37. +——+  
  38. rows in set (0.00 sec)  

4. 循环语句 while…end while、loop…end loop、repeat…end repeat 以及很难驾驭的 goto。

Code   ViewPrint
  1. mysql> select * from t//  
  2. +——+  
  3. | s1   |  
  4. +——+  
  5. |    6 |  
  6. |    6 |  
  7. |    6 |  
  8. |    6 |  
  9. |   18 |  
  10. +——+  
  11. rows in set (0.00 sec)  
  12.   
  13. mysql> create procedure p14()  
  14.     -> begin  
  15.     ->   declare v int;  
  16.     ->   set v = 0;  
  17.     ->   while v < 5 do  
  18.     ->     insert into t values(v);  
  19.     ->     set v = v + 1;  
  20.     ->   end while;  
  21.     -> end; //  
  22. Query OK, 0 rows affected (0.00 sec)  
  23.   
  24. mysql> call p14() //  
  25. Query OK, 1 row affected (0.04 sec)  
  26.   
  27. mysql> select * from t; //  
  28. +——+  
  29. | s1   |  
  30. +——+  
  31. |    6 |  
  32. |    6 |  
  33. |    6 |  
  34. |    6 |  
  35. |   18 |  
  36. |    0 |  
  37. |    1 |  
  38. |    2 |  
  39. |    3 |  
  40. |    4 |  
  41. +——+  
  42. 10 rows in set (0.00 sec)  
Code   ViewPrint
  1. mysql> create procedure p15()  
  2.     -> begin  
  3.     ->   declare v int;  
  4.     ->   set v=0;  
  5.     ->   repeat  
  6.     ->     insert into t values(v);  
  7.     ->     set v=v+1;  
  8.     ->     until v>=5  
  9.     ->   end repeat;  
  10.     -> end; //  
  11. Query OK, 0 rows affected (0.00 sec)  
Code   ViewPrint
  1. mysql> create procedure p16()  
  2.     -> begin   
  3.     ->   declare v int;  
  4.     ->   set v=0;  
  5.     ->   loop_label:LOOP  
  6.     ->     insert into t values(v);  
  7.     ->     set v=v+1;  
  8.     ->     if v>=5 then   
  9.     ->       leave loop_label;  
  10.     ->     end if;  
  11.     ->   end LOOP;  
  12.     -> end; //  
  13. Query OK, 0 rows affected (0.00 sec)  

以上循环的代码都会向表 t 中插入 5 行数据,值分别为 0、1、2、3、4。

下面是个迭代语句 ITERATE,相当于其它高级语言中的 continue 关键字,跳过当次循环,接着进行下一次。

Code   ViewPrint
  1. mysql> create procedure p20()  
  2.     -> begin  
  3.     ->   declare v int;  
  4.     ->   set v=0;  
  5.     ->   loop_label:LOOP  
  6.     ->   if v=3 then  
  7.     ->     set v=v+1;  
  8.     ->     iterate loop_label;  
  9.     ->   end if;  
  10.     ->   insert into t values(v);  
  11.     ->   set v=v+1;  
  12.     ->   if v>=5 then  
  13.     ->     leave loop_label;  
  14.     ->   end if;  
  15.     ->   end LOOP;  
  16.     -> end; //  
  17. Query OK, 0 rows affected (0.00 sec)  

这个存储过程执行后的结果是,向表 t 中插入 4 条数据,分别为 0、1、2、4。

GOTO 循环平时很少用,原因是控制不好,可能会导致代码流程特别乱,很难管理,这里也就不多做介绍了。到这里,存储过程基础大概讲的差不多了,让我们把分隔符先还原成默认的分号。
mysql> delimiter ;

讲了这么多存储过程的东西,现在已经建了很多个存储过程了。在 MySQL 中如何管理这些存储过程呢?接下来就讲讲这方面的东西吧。

1. 查看数据库下都有什么存储过程。

语句一:

Code   ViewPrint
  1. mysql> select name from mysql.proc where db=’test’;  
  2. +———————-+  
  3. name                 |  
  4. +———————-+  
  5. | demo_inout_parameter |  
  6. | demo_in_parameter    |  
  7. | demo_out_parameter   |  
  8. | p1                   |  
  9. | p10                  |  
  10. | p11                  |  
  11. | p12                  |  
  12. | p13                  |  
  13. | p14                  |  
  14. | p15                  |  
  15. | p16                  |  
  16. | p2                   |  
  17. | p20                  |  
  18. | p7                   |  
  19. | p8                   |  
  20. | p_in                 |  
  21. | p_out                |  
  22. +———————-+  
  23. 17 rows in set (0.00 sec)  

语句二:

Code   ViewPrint
  1. mysql> select routine_name from information_schema.routines where routine_schema=’test’;  
  2. +———————-+  
  3. | routine_name         |  
  4. +———————-+  
  5. | demo_inout_parameter |  
  6. | demo_in_parameter    |  
  7. | demo_out_parameter   |  
  8. | p1                   |  
  9. | p10                  |  
  10. | p11                  |  
  11. | p12                  |  
  12. | p13                  |  
  13. | p14                  |  
  14. | p15                  |  
  15. | p16                  |  
  16. | p2                   |  
  17. | p20                  |  
  18. | p7                   |  
  19. | p8                   |  
  20. | p_in                 |  
  21. | p_out                |  
  22. +———————-+  
  23. 17 rows in set (0.00 sec)  

语句三:

Code   ViewPrint
  1. mysql> show procedure status where db=’test’;  
  2. +——+———————-+———–+—————-+———————+———————+—————+————-+———————-+———————-+——————–+  
  3. | Db   | Name                 | Type      | Definer        | Modified            | Created             | Security_type | Comment     | character_set_client | collation_connection | Database Collation |  
  4. +——+———————-+———–+—————-+———————+———————+—————+————-+———————-+———————-+——————–+  
  5. | test | demo_inout_parameter | PROCEDURE | root@localhost | 2015-02-01 14:16:36 | 2015-02-01 14:16:36 | DEFINER       |             | utf8                 | utf8_general_ci      | latin1_swedish_ci  |  
  6. | test | demo_in_parameter    | PROCEDURE | root@localhost | 2015-02-01 13:56:44 | 2015-02-01 13:56:44 | DEFINER       |             | utf8                 | utf8_general_ci      | latin1_swedish_ci  |  
  7. | test | demo_out_parameter   | PROCEDURE | root@localhost | 2015-02-01 14:03:09 | 2015-02-01 14:03:09 | DEFINER       |             | utf8                 | utf8_general_ci      | latin1_swedish_ci  |  
  8. | test | p1                   | PROCEDURE | root@localhost | 2015-01-31 18:40:37 | 2015-01-31 18:40:37 | DEFINER       |             | utf8                 | utf8_general_ci      | latin1_swedish_ci  |  
  9. | test | p10                  | PROCEDURE | root@localhost | 2015-02-01 15:06:28 | 2015-02-01 15:06:28 | DEFINER       |             | utf8                 | utf8_general_ci      | latin1_swedish_ci  |  
  10. | test | p11                  | PROCEDURE | root@localhost | 2015-02-01 15:09:19 | 2015-02-01 15:09:19 | DEFINER       |             | utf8                 | utf8_general_ci      | latin1_swedish_ci  |  
  11. | test | p12                  | PROCEDURE | root@localhost | 2015-02-01 15:18:15 | 2015-02-01 15:18:15 | DEFINER       |             | utf8                 | utf8_general_ci      | latin1_swedish_ci  |  
  12. | test | p13                  | PROCEDURE | root@localhost | 2015-02-01 16:07:37 | 2015-02-01 16:07:37 | DEFINER       |             | utf8                 | utf8_general_ci      | latin1_swedish_ci  |  
  13. | test | p14                  | PROCEDURE | root@localhost | 2015-02-01 16:16:24 | 2015-02-01 16:16:24 | DEFINER       |             | utf8                 | utf8_general_ci      | latin1_swedish_ci  |  
  14. | test | p15                  | PROCEDURE | root@localhost | 2015-02-01 17:13:16 | 2015-02-01 17:13:16 | DEFINER       |             | utf8                 | utf8_general_ci      | latin1_swedish_ci  |  
  15. | test | p16                  | PROCEDURE | root@localhost | 2015-02-01 17:17:10 | 2015-02-01 17:17:10 | DEFINER       |             | utf8                 | utf8_general_ci      | latin1_swedish_ci  |  
  16. | test | p2                   | PROCEDURE | root@localhost | 2015-01-31 19:12:49 | 2015-01-31 19:12:49 | DEFINER       | A Procedure | utf8                 | utf8_general_ci      | latin1_swedish_ci  |  
  17. | test | p20                  | PROCEDURE | root@localhost | 2015-02-01 17:28:21 | 2015-02-01 17:28:21 | DEFINER       |             | utf8                 | utf8_general_ci      | latin1_swedish_ci  |  
  18. | test | p7                   | PROCEDURE | root@localhost | 2015-02-01 14:58:04 | 2015-02-01 14:58:04 | DEFINER       |             | utf8                 | utf8_general_ci      | latin1_swedish_ci  |  
  19. | test | p8                   | PROCEDURE | root@localhost | 2015-02-01 15:04:12 | 2015-02-01 15:04:12 | DEFINER       |             | utf8                 | utf8_general_ci      | latin1_swedish_ci  |  
  20. | test | p_in                 | PROCEDURE | root@localhost | 2015-01-31 19:47:34 | 2015-01-31 19:47:34 | DEFINER       |             | utf8                 | utf8_general_ci      | latin1_swedish_ci  |  
  21. | test | p_out                | PROCEDURE | root@localhost | 2015-01-31 19:50:40 | 2015-01-31 19:50:40 | DEFINER       |             | utf8                 | utf8_general_ci      | latin1_swedish_ci  |  
  22. +——+———————-+———–+—————-+———————+———————+—————+————-+———————-+———————-+——————–+  
  23. 17 rows in set (0.00 sec)  

如果想查看某一个存储过程的详细信息,可以用语句 show create procedure 数据库名.存储过程名;
mysql> show create procedure test.p2;

存储过程的修改语句 alert procedure。不过修改好像只能修改执行权限等,如果需要修改主题,很多人建议删了重建。

删除存储过程的语句是 delete procedure 存储过程名;

最后,有网友整理了些 MySQL 存储过程中的基本函数,顺便分享给大家。

Code   ViewPrint
  1. /** 
  2.  * 字符串类 
  3.  */  
  4. CHARSET(str) //返回字串字符集  
  5. CONCAT (string2 [,… ]) //连接字串  
  6. INSTR (string ,substring ) //返回substring首次在string中出现的位置,不存在返回0  
  7. LCASE (string2 ) //转换成小写  
  8. LEFT (string2 ,length ) //从string2中的左边起取length个字符  
  9. LENGTH (string ) //string长度  
  10. LOAD_FILE (file_name ) //从文件读取内容  
  11. LOCATE (substring , string [,start_position ] ) 同INSTR,但可指定开始位置  
  12. LPAD (string2 ,length ,pad ) //重复用pad加在string开头,直到字串长度为length  
  13. LTRIM (string2 ) //去除前端空格  
  14. REPEAT (string2 ,count ) //重复count次  
  15. REPLACE (str ,search_str ,replace_str ) //在str中用replace_str替换search_str  
  16. RPAD (string2 ,length ,pad) //在str后用pad补充,直到长度为length  
  17. RTRIM (string2 ) //去除后端空格  
  18. STRCMP (string1 ,string2 ) //逐字符比较两字串大小,  
  19. SUBSTRING (str , position [,length ]) //从str的position开始,取length个字符,  
  20. // 注:mysql中处理字符串时,默认第一个字符下标为1,即参数position必须大于等于1  
  21. TRIM([[BOTH|LEADING|TRAILING] [padding] FROM]string2) //去除指定位置的指定字符  
  22. UCASE (string2 ) //转换成大写  
  23. RIGHT(string2,length) //取string2最后length个字符  
  24. SPACE(count) //生成count个空格  
  25.   
  26. /** 
  27.  * 数学类 
  28.  */  
  29. ABS (number2 ) //绝对值  
  30. BIN (decimal_number ) //十进制转二进制  
  31. CEILING (number2 ) //向上取整  
  32. CONV(number2,from_base,to_base) //进制转换  
  33. FLOOR (number2 ) //向下取整  
  34. FORMAT (number,decimal_places ) //保留小数位数  
  35. HEX (DecimalNumber ) //转十六进制  
  36. // 注:HEX()中可传入字符串,则返回其ASC-11码,如HEX(‘DEF’)返回4142143  
  37. // 也可以传入十进制整数,返回其十六进制编码,如HEX(25)返回19  
  38. LEAST (number , number2 [,..]) //求最小值  
  39. MOD (numerator ,denominator ) //求余  
  40. POWER (number ,power ) //求指数  
  41. RAND([seed]) //随机数  
  42. ROUND (number [,decimals ]) //四舍五入,decimals为小数位数]  
  43.   
  44. /** 
  45.  * 日期时间类 
  46.  */  
  47. ADDTIME (date2 ,time_interval ) //将time_interval加到date2  
  48. CONVERT_TZ (datetime2 ,fromTZ ,toTZ ) //转换时区  
  49. CURRENT_DATE ( ) //当前日期  
  50. CURRENT_TIME ( ) //当前时间  
  51. CURRENT_TIMESTAMP ( ) //当前时间戳  
  52. DATE (datetime ) //返回datetime的日期部分  
  53. DATE_ADD (date2 , INTERVAL d_value d_type ) //在date2中加上日期或时间  
  54. DATE_FORMAT (datetime ,FormatCodes ) //使用formatcodes格式显示datetime  
  55. DATE_SUB (date2 , INTERVAL d_value d_type ) //在date2上减去一个时间  
  56. DATEDIFF (date1 ,date2 ) //两个日期差  
  57. DAY (date ) //返回日期的天  
  58. DAYNAME (date ) //英文星期  
  59. DAYOFWEEK (date ) //星期(1-7) ,1为星期天  
  60. DAYOFYEAR (date ) //一年中的第几天  
  61. EXTRACT (interval_name FROM date ) //从date中提取日期的指定部分  
  62. MAKEDATE (year ,day ) //给出年及年中的第几天,生成日期串  
  63. MAKETIME (hour ,minute ,second ) //生成时间串  
  64. MONTHNAME (date ) //英文月份名  
  65. NOW ( ) //当前时间  
  66. SEC_TO_TIME (seconds ) //秒数转成时间  
  67. STR_TO_DATE (string ,format ) //字串转成时间,以format格式显示  
  68. TIMEDIFF (datetime1 ,datetime2 ) //两个时间差  
  69. TIME_TO_SEC (time ) //时间转秒数]  
  70. WEEK (date_time [,start_of_week ]) //第几周  
  71. YEAR (datetime ) //年份  
  72. DAYOFMONTH(datetime) //月的第几天  
  73. HOUR(datetime) //小时  
  74. LAST_DAY(date) //date的月的最后日期  
  75. MICROSECOND(datetime) //微秒  
  76. MONTH(datetime) //月  
  77. MINUTE(datetime) //分返回符号,正负或0  
  78. SQRT(number2) //开平方  

好了,基础部分到此结束,希望对你有所帮助。

此条目发表在 MySQL 分类目录,贴了 , , , 标签。将 固定链接 加入收藏夹。

MySQL5.x.x存储过程简单入门》有0条回应

  1. 没有找到评论。

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注