MySQL的命令总结(二)

数据库的命令行函数使用总结

MySql的函数

  • 函数支持嵌套
  • METHOD(METHOD(KEY,…),…);
  • SET NAMES GBK;设置客户端字符集
  • SET PASSWORD=PASSWORD(‘password’); 设置mysql密码
  • DELIMITER // 修改结束符为//。可修改结束符号

字符函数

1
2
3
4
5
KEY:CONCAT() | CONCAT_WS()
E.g. : SELECT CONCAT('CHAR','CHAR',...); //输出字符连接后的记录
E.g. : SELECT CONCAT(colname,colname2,...) FROM table;//输出多个字段值连接后的记录
E.g. : SELECT CONCAT_WS('|','CHAR','CHAR',...);//输出使用第一个参数分隔符进行字符的连接
E.g. : SELECT CONCAT_WS('-','colname','colname2',...) FROM tablename;//colname-colname2 输出使用第一个参数分隔符进行字段值的连接
1
2
3
4
5
KEY:FORMAT()
E.g. : SELECT FORMAT(key,parameter); //数字格式化 参数一是值,参数二是取整位数 RETURN
SELECT FORMAT(12345.678,2) 12,345.68
SELECT FORMAT(12345.678,1) 12,345.7
SELECT FORMAT(12345.678,0) 12,346
1
2
3
KEY:LOWER() | UPPER()
E.g. : SELECT LOWER('CHAR'); //转换小写
E.g. : SELECT UPPER('char'); //转换大写
1
2
3
KEY:LEFT() | RIGHT()
E.g. : SELECT LEFT('CHAR',parameter);// 取值的左parameter位
E.g. : SELECT RIGHT('CHAR',parameter);// 取值的右parameter位
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
KEY: LENGTH() | LTRIM() | RTRIM() | (TRIM() | LEADING | TRAILING | BOTH) | REPLACE() | SUBSTRING() | (LIKE | ESCAPE)
E.g. : SELECT LENGTH('CH AR');// 获取字符长度,包含空格。RETURN 5
E.g. : SELECT LTRIM(' CHAR '); // 删除字符串前方的空格 RETURN ('CHAR ')
E.g. : SELECT RTRIM(' CHAR '); // 删除字符串后方的空格 RETURN (' CHAR')
E.g. : SELECT TRIM(' CHAR '); // 删除字符串前后方的空格 RETURN ('CHAR')
E.g. : SELECT TRIM(LEADING'?' FROM '??CHAR????'); //删除字符串前方指定的字符 RETURN ('CHAR????')
E.g. : SELECT TRIM(TRAILING'?' FROM '??CHAR????'); //删除字符串后方指定的字符 RETURN ('??CHAR')
E.g. : SELECT TRIM(BOTH'?' FROM '??CHAR????'); //删除字符串前后方指定的字符 RETURN ('CHAR')
E.g. : SELECT REPLACE('??CH??AR???','?|??','^'); //替换字符串中指定的字符为另外一个字符 RETURN ('^^CH^^AR^^^') | ('^CH^AR^?')
E.g. : SELECT SUBSTRING('VARCHAR',3); //输出字符串指定位置开始的记录到结束,索引从1开始算起非0算起。 RETURN ('RCHAR')
E.g. : SELECT SUBSTRING('VARCHAR',-2); //输出字符串从结尾往回算起到负数位置,索引从-1开始算起非0算起。 RETURN ('AR') 负数代表反向
E.g. : SELECT SUBSTRING('VARCHAR',3,4); //输出字符串指定位置开始的记录到参数的个数,索引从1开始算起非0算起。 RETURN ('RCHA') :显示4个字符
E.g. : SELECT 'MySQL' LIKE '%yS%'; //返回布尔类型 ,值为1,代表true 。意思为字符串中有like后面包含的字符,
E.g. : SELECT * FROM tablename WHERE colname LIKE '%?%'; //意思为查找表内字段中含有?的字符串,%、_为通配符, %为任意个字符 _为任意一个字符
E.g. : SELECT * FROM tablename WHERE colname LIKE '%1%%' ESCAPE '1'; //意思为查找表内字段中含有%的字符串,%为通配符的同时,用ESCAPE关键字告诉SQL'1'后面的字符为字符而不是通配符。

数值运算符函数

1
2
3
4
5
6
7
8
9
KEY: SEIL() | FLOOR() | DIV | MOD | POWER() | ROUND() | TRUNCATE()
E.g. : SELECT SEIL(3.01); 向上取整 RETURN 4
E.g. : SELECT FLOOR(3.99); 向下取整 RETURN 3
E.g. : SELECT 3 DIV 4; //整除 RETURN 0 :答案3除以4等于0.75,而整除是舍弃小数
E.g. : SELECT 5 MOD 4; //取余 (取模) RETURN 1 , 跟%取模相同
E.g. : SELECT POWER(3,3); //次方运算 RETURN 27 ,3的3次方。
E.g. : SELECT ROUND(32.652,2); // 四舍五入数值 RETURN 32.65 ,后方数值为小数位数。
E.g. : SELECT TRUNCATE(125.898,2) // 数字截取 RETURN 125.89 ,不同于四舍五入,单纯减少小数点后位数,为0则没小数。负数可以去截取整数部分。(125.898,-1) RETURN 120

比较运算符函数

1
2
3
4
5
6
KEY: [NOT] BETWEEN ... AND | IN() | IS NULL
E.g. : SELECT 15 [NOT] BETWEEN 1 AND 22; //查询数字是否在后方所指值的范围内,返回布尔类型 。 RETURN 1,加上NOT则是取反;
E.g. : SELECT 15 [NOT] IN(5,8,10,15,20,22); //查询值是否在后续指定的值里面,与枚举类似,返回布尔类型。 RETURN 1 ,加上NOT则是取反;
E.g. : SELECT NULL IS NULL ; //查询一个值是否为空,返回布尔类型 RETURN 1,SELECT '' IS NULL;RETURN 0 ,加上NOT则是取反;
E.g. : SELECT * FROM tablename WHERE colname IS NULL ; //可以用来查询表中字段为空或者非空的值记录

日期时间函数

1
2
3
4
5
6
7
8
KEY: NOW() | CURDATE() | CURTIME() | DATE_ADD('DATE',INTERVAL 000 (YEAR|MONTH|WEEK|DAY) | DATEDIFF('DATE','DATE') | DATE_FORMAT('DATE','%m[]%d[]%Y')
E.g. : SELECT NOW();
E.g. : SELECT CURDATE(); // 输出日期 RETURN 0000-00-00
E.g. : SELECT CURTIME(); // 输出时间 RETURN 00:00:00
E.g. : SELECT DATE_ADD('2014-3-12',INTERVAL 365 DAY); //给当前值日期添加365天时间 RETURN 2015-03-12 ,也可以减少时间日期 ('2014-3-12',INTERVAL -365 DAY);RETURN 2013-03-12
E.g. : SELECT DATEDIFF('2013-3-12','2014-3-12'); //求两个日期值的天数差值 RETURN -365 意思左边少于右边几天
E.g. : SELECT DATE_FORMAT('2014-3-12','%m/%d/%Y'); //格式化日期并且输出查询结果,%为通配符转义字符 %Y年%m月%d日 H点:%i分:%s秒

信息函数

1
2
3
4
5
6
7
KEY: CONNECTION_ID() | DATEBASE() | LAST_INSERT_ID() | USER() | VERSION()
E.g. : SELECT CONNECTION_ID(); //查询连接ID RETURN
E.g. : SELECT DATEBASE(); //查询当前使用的数据库 RETURN databasename
E.g. : SELECT LAST_INSERT_ID(); //查询最后插入记录的ID号 RETURN 最后操作的表中的ID号;多条操作的情况,以语句操作的第一条ID为准,后续ID忽略
E.g. : SELECT USER(); //查询当前的用户 RETURN root@localhost
E.g. : SELECT VERSION(); //查询当前版本信息 RETURN 5.7.11-log

聚合函数

1
2
3
4
5
6
7
KEY: AVG() | COUNT() | MAX() | MIN() | SUM()
E.g. : SELECT AVG(colname) AS ascolname FROM tablename;// 可用于查找计算出字段数值的平均值 RETURN keyavg
E.g. : SELECT COUNT(colname) AS ascolname FROM tablename;// 可用于查找计算出字段数值的记录数 RETURN keycount
E.g. : SELECT MAX(colname) AS ascolname FROM tablename;// 可用于查找计算出字段数值的最大值 RETURN keymax
E.g. : SELECT MIN(colname) AS ascolname FROM tablename;// 可用于查找计算出字段数值的最小值 RETURN keymin
E.g. : SELECT SUM(colname) AS ascolname FROM tablename;// 可用于查找计算出字段数值的和 RETURN keysum

加密函数

1
2
3
4
KEY: MD5() | PASSWORD()
E.g. : SELECT MD5('VARCHAR'); //MD5加密,WEB应用建议MD5加密密码
E.g. : SELECT PASSWORD('VARCHAR'); //PASSWORD加密,可修改当前或者其他用户密码

自定义函数

1
2
3
4
5
6
7
8
KEY: CREATE | FUNCTION | RETURNS | {SYROMH|INTEGER|REAL|DECIMAL} RETURN |BEGIN END
E.g. : CREATE FUNCTION NOWCHINA() RETURNS VARCHAR(30) RETURN DATE_FORMAT(NOW(),'%Y年%m月%d日 H点:%i分:%s秒'); //创建了一个封装了格式化过的现在日期时间函数
E.g. : CREATE FUNCTION AVG1(num1 SMALLINT UNSIGNED,num2 SMALLINT UNSIGNED[,...]) RETURNS FLOAT(10,2) UNSIGNED RETURN (num1+num2)/2; //创建了一个计算num1和num2平均值的函数
E.g. : DELIMITER //
CREATE FUNCTION ADDUSER(username VARCHAR(20)[,...]) RETURNS INT UNSIGNED BEGIN INSERT test(username) VALUES(username); //带复合结构BEGINEND的函数,复合函数用于包含拥有多条SQL语句的作用
RETURN LAST_INSERT_ID();
END// //可以使用ADDUSER(传参,...);来调用。并且返回了一个INT类型的id号

创建储存过程

  • 存储过程是mysql语句和控制语句的预编译集合体

  • BEGINEND内属于局部变量

  • @属于用户变量 SET @i = 8; SELECT @i; RETURN 8;

  • SELECT ROW_COUNT() INTO colname; 查询处理的记录数

  • COUNT(colname) 查询处理后的记录数

  • 储存过程可以有多个返回值,功能更复杂,独立运行 函数只能有一个返回值 针对性强 函数依靠其他函数组成

  • 储存过程不能修改过程体,只能修改参数属性值 如需要修改过程体需要删除后重建

  • 创建储存过程或者自定义函数的时候都需要通过DELIMITER修改结束符(定界符),否则无法完成BEGIN内的SQL语句书写。如果函数体和过程体内有多个语句需要包含在BEGINEND内,存储过程需要通过CALL来调用,且函数名建议使用括号结尾

    1
    2
    3
    4
    5
    KEY: CREATE | DROP | ALTER | PROCEDURE | DEFINER | IN | OUT | INOUT CALL | @
    E.g. : CREATE [DEFINER = {user | CURRENT_USER }] PROCEDURE sp_name ([proc_parameter[,...]]) [characteristic ...] routine_body
    E.g. : CREATE PROCEDURE sp_name() SELECT NOW(); CALL sp_name;// 声明一个无参储存过程,通过CALL 过程名来输出当前时间。无参数的时候调用过程名字括号可加可不加
    E.g. : DROP PROCEDURE removeUserById; //删除储存过程方法;

    E.g. : DELIMITER //

    1
    2
    3
    4
    5
    CREATE PROCEDURE removeUserById(IN id INT UNSIGNED) // IN 单参数传入 ,此关键字说明此方法只传入参数处理数据,而无需返回结果
    BEGIN
    DELETE FROM users WHERE id = id; //声明传参名时不可跟表单重名,建议使用表头字母_id来声明 x_id
    END// //创建一个封装了删除表指定字段的储存过程方法 ,传入值。 此处id定义重复,有出错,需修改id。从此看出,在写过程中不可重复声明
    DELIMITER ; //CALL removeUserById(4); 使用CALL来调用方法删除指定的ID行

    E.g. : DELIMITER // 单参数传入 单参数返回

    CREATE PROCEDURE removeUserById(IN p_id INT UNSIGNED,OUT userNums INT UNSIGNED) // IN 传入参数 ,OUT返回结果 ,此关键字说明此方法传入参数后并且规定返回指定类型结果
    BEGIN
    DELETE FROM users WHERE id = p_id; //声明传参名时不可跟表单重名,建议使用表头字母_id来声明 x_id  .此语句为执行删除传入id的id行数据;
    SELECT count(id) FROM users INTO userNums; //此语句为,上语句删除完毕后,查询删除后现id字段的计数,并且传输结果给userNums返回出值
    END//
    DELIMITER ; // 调用过程需要传入接受返回值的变量 CALL removeUserAndReturnUserNums(10,@nums);  此时数值被写入到 @nums变量,可通过SELECT @nums来查询   @是一种声明用户变量   BEGINEND内可声明局部变量
    

    E.e. : DELIMITER // 单参数传入 多参数返回

    CREATE PROCEDURE removeUserByAgeAndReturnInfos(IN p_age SMALLINT UNSIGNED O,OUT deleteUser SMALLINT UNSIGNED,OUT userCounts SMALLINT UNSIGNED)
    BEGIN
    DELETE FROM users WHERE age = p_age; // 删除掉表内匹配p_age的一行数据 参数用了IN,所以不用返回值,只需处理传入值
    SELECT ROU_COUNT() INTO deleteUsers; //查询更改的数量。并把数值返回给deleteUsers接收,以供后续传值到其他变量中查询
    SELECT COUNT(id) FROM users INTO userCounts; //查询来自users表中更改后剩下的ID计数,并返回结果给userCounts接收
    END//
    DELIMITER ; //使用CALL removeUserByAgeAndReturnInfos(20,@a,@b); SELECT @a,@b; RETURN 处理数 处理后计数 
    
文章目录
  1. 1. MySql的函数
    1. 1.1. 字符函数
    2. 1.2. 数值运算符函数
    3. 1.3. 比较运算符函数
    4. 1.4. 日期时间函数
    5. 1.5. 信息函数
    6. 1.6. 聚合函数
    7. 1.7. 加密函数
    8. 1.8. 自定义函数
    9. 1.9. 创建储存过程
      1. 1.9.1. E.g. : DELIMITER //
      2. 1.9.2. E.g. : DELIMITER // 单参数传入 单参数返回
      3. 1.9.3. E.e. : DELIMITER // 单参数传入 多参数返回
,