MySQL数据库基础(下)

11.MySQL 常用函数

日期和时间函数
SELECT CURDATE(),CURTIME(),MONTH(birthday) AS m FROM t_data;//返回当前日期,时间,返回birthday中的月份值
字符串函数
SELECT userName,CHAR_LENGTH(userName),UPPER(userName),LOWER(userName) FROM t_data;
//计算userName字符串的字符个数(UPPER(s)把s中所有字母变成大写)(LOWER(s)把s中所有字母变成小写)
数学函数
SELECT num,ABS(num) FROM t_data;//求绝对值
SELECT SQRT(4) FROM t_data;//求平方根
SELECT MOD(9,2) FROM t_data;//求余
加密函数

1,PASSWORD(str) 一般对用户的密码加密 不可逆不能复原
2,MD5(str) 普通加密 不可逆不能复原
3,ENCODE(str,pswd_str) 加密函数,结果是一个二进制数,必须使用 BLOB 类型的字段来保存它;
4,DECODE(crypt_str,pswd_str) 解密函数;


INSERT INTO t_data VALUES(NULL,'2019-9-21','a',1,PASSWORD('123456'));//一般对用户的密码加密,不可逆不能复原
INSERT INTO t_data VALUES(NULL,'2019-9-21','a',1,MD5('123456'));//普通加密,不可逆不能复原
INSERT INTO t_data VALUES(NULL,'2019-9-21','a',1,MD5('123456'),ENCODE('123456','aa'));//加密函数,结果是一个二进制数,必须用BLOB类型的字段来保存它
INSERT INTO t_data VALUES(NULL,'2019-9-21','a',1,MD5('123456'),ENCODE('abc','aa'));
SELECT pp FROM t_data WHERE id=7;
SELECT DECODE(pp,'aa') FROM t_data WHERE id=7;//解密函数,将pp解密为原来的可见密码

12. 存储过程和函数(实例)

存储过程的引用

==存储过程是一组为了完成特定功能的SQL 语句集,它存储在数据库中,一次编译后永久有效,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象。==

函数的引入

==数据库函数是指当需要分析数据清单中的数值是否符合特定条件时,使用数据库工作表函数。==

12.1创建存储过程
CREATE
    [DEFINER = { user | CURRENT_USER }]
 PROCEDURE sp_name ([proc_parameter[,...]])
    [characteristic ...] routine_body

proc_parameter:
    [ IN | OUT | INOUT ] param_name type

characteristic:
    COMMENT 'string'
  | LANGUAGE SQL
  | [NOT] DETERMINISTIC
  | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
  | SQL SECURITY { DEFINER | INVOKER }

routine_body:
  Valid SQL routine statement

[begin_label:] BEGIN
  [statement_list]
    ……
END [end_label]

实例

USE db_book
DELIMITER &&
CREATE PROCEDURE pro_book (IN bT INT,OUT count_num INT)
      READS SQL DATA//说明子程序使用SQL语句的限制是从begin开始到end结束
      BEGIN
        SELECT COUNT(*) FROM t_book WHERE bookTypeId=bT;
      END
      &&
DELIMITER ;//创建存储过程PROCEDURE,用BEGIN和END来标志SQL代码的开始和结束

调用存储过程

CALL pro_book(1,@total);//调用存储过程
12.2创建存储函数
CREATE FUNCTION <函数名> ( [ <参数1> <类型1> [ , <参数2> <类型2>] ])
  RETURNS <类型>
  <函数主体>

实例

DELIMITER &&&
CREATE FUNCTION func_book(bookId INT)
  RETURNS VARCHAR(20)
  BEGIN
      RETURN (SELECT bookName FROM t_book WHERE id=bookId);
  END
  &&&
DELIMITER ;//创建函数func_book

调用存储函数

SELECT func_book(2);
12.3变量的使用
定义变量
 DECLARE a,b VARCHAR(20);//定义变量
为变量赋值
DECLARE a,b VARCHAR(20);
SET a='java1234',b='123456';//定义变量并且为变量赋值

13.游标的使用

==查询语句可能查询出多条记录,在存储过程和函数中使用游标来逐条读取查询结果集中的记录。游标的使用包括声明游标、打开游标、使用游标和关闭游标。游标必须声明在处理程序之前,并且声明在变量和条件之后==

声明游标
DECLARE cur_t_user2 CURSOR FOR SELECT userName2,password2 FROM t_user2;//声明游标
打开游标
OPEN cur_t_user2;//打开游标)
使用游标
FETCH cur_t_user2 INTO a,b;//使用游标
关闭游标
CLOSE cur_t_user2;//关闭游标

Author: Lelege
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint polocy. If reproduced, please indicate source Lelege !
评论
 Previous
MySQL数据库基础(中-2) MySQL数据库基础(中-2)
9.视图的引入==视图是原始数据库数据的一种变换,是查看表中数据的另外一种方式。可以将视图看成是一个移动的窗口,通过它可以看到感兴趣的数据。 视图是从一个或多个实际表中获得的,这些表的数据存放在数据库中。那些用于产生视图的表叫做该视图的基表
2020-02-24
Next 
MySQL(完) MySQL(完)
14.流程控制的使用(实例)==存储过程和函数中可以使用流程控制来控制语句的执行。MySQL 中可以使用 IF 语句、CASE 语句、LOOP语句、LEAVE 语句、ITERATE 语句、REPEAT 语句和 WHILE 语句来进行流程控制
2020-02-24
  TOC