【MySQL内置函数】
目录:
- 前言
- 一、日期函数
- 获取日期
- 获取时间
- 获取时间戳
- 在日期上增加时间
- 在日期上减去时间
- 计算两个日期相差多少天
- 当前时间
- 案例:留言板
- 二、字符串函数
- 查看字符串字符集
- 字符串连接
- 查找字符串
- 大小写转换
- 子串提取
- 字符串长度
- 字符串替换
- 字符串比较
- 消除左右空格
- 案例 - 1:姓名格式化
- 案例 - 2:学生成绩通知
- 三、数学函数
- 绝对值
- 进制转换
- 取整规则
- 格式化小数位
- 随机数
- 取模
- 案例-1:产生0 ~ 100随机数
- 四、其他函数
- 查询当前用户
- 查询当前正在使用的数据库
- 数据加密
- ifnull条件判断
前言
剑指offer:一年又7天 |
---|
一、日期函数
函数名称 | 描述 |
---|---|
current_date() | 当前日期:年月日 |
current_time() | 当前时间:时分秒 |
current_timestamp() | 当前时间戳:年月日 时分秒 |
date_add(date, interval num d_value_type) | 在date中添加日期或时间 d_value_type可选类型:year、month、day、hour、minute、second |
date_sub(date, interval num d_value_type) | 在date中减去日期或时间 |
datediff(date1, date2) | 两个日期的差:date1 - date2,单位是天 |
now() | 当前日期时间( 同current_timestamp() ) |
案例:
获取日期
mysql> select current_date();
+----------------+
| current_date() |
+----------------+
| 2023-11-25 |
+----------------+
1 row in set (0.00 sec)
获取时间
mysql> select current_time();
+----------------+
| current_time() |
+----------------+
| 15:26:57 |
+----------------+
1 row in set (0.00 sec)
获取时间戳
mysql> select current_timestamp();
+---------------------+
| current_timestamp() |
+---------------------+
| 2023-11-25 15:27:17 |
+---------------------+
1 row in set (0.00 sec)
在日期上增加时间
-- 当前日期
mysql> select current_date();
+----------------+
| current_date() |
+----------------+
| 2023-11-25 |
+----------------+
1 row in set (0.01 sec)
-- 当前日期加10天
mysql> select date_add(current_date(), interval 10 day);
+-------------------------------------------+
| date_add(current_date(), interval 10 day) |
+-------------------------------------------+
| 2023-12-05 |
+-------------------------------------------+
1 row in set (0.00 sec)
-- 指定日期加10天
mysql> select date_add('2000-1-1', interval 10 day);
+---------------------------------------+
| date_add('2000-1-1', interval 10 day) |
+---------------------------------------+
| 2000-01-11 |
+---------------------------------------+
1 row in set (0.00 sec)
-- 当前时间加10分钟
mysql> select date_add(now(), interval 10 minute);
+-------------------------------------+
| date_add(now(), interval 10 minute) |
+-------------------------------------+
| 2023-11-25 15:42:48 |
+-------------------------------------+
1 row in set (0.00 sec)
在日期上减去时间
-- 当前日期减10天
mysql> select date_sub(current_date(), interval 10 day);
+-------------------------------------------+
| date_sub(current_date(), interval 10 day) |
+-------------------------------------------+
| 2023-11-15 |
+-------------------------------------------+
1 row in set (0.00 sec)
计算两个日期相差多少天
-- date1 - date2
mysql> select datediff('2023-11-24', '2023-11-25');
+--------------------------------------+
| datediff('2023-11-24', '2023-11-25') |
+--------------------------------------+
| -1 |
+--------------------------------------+
1 row in set (0.00 sec)mysql> select datediff('2023-11-25', '2023-11-24');
+--------------------------------------+
| datediff('2023-11-25', '2023-11-24') |
+--------------------------------------+
| 1 |
+--------------------------------------+
1 row in set (0.00 sec)
-- 新中国成立至今天数
mysql> select datediff(current_date(), '1949-10-1');
+---------------------------------------+
| datediff(current_date(), '1949-10-1') |
+---------------------------------------+
| 27083 |
+---------------------------------------+
1 row in set (0.00 sec)
-- 单位是天
mysql> select datediff(now(), '1949-10-1 15:0:0');
+-------------------------------------+
| datediff(now(), '1949-10-1 15:0:0') |
+-------------------------------------+
| 27083 |
+-------------------------------------+
1 row in set (0.00 sec)
当前时间
mysql> select now();
+---------------------+
| now() |
+---------------------+
| 2023-11-25 15:46:03 |
+---------------------+
1 row in set (0.00 sec)
案例:留言板
-- 创建留言板
mysql> create table msg_tb(-> id int unsigned primary key auto_increment,-> name varchar(20) not null,-> msg varchar(100) comment '留言信息',-> msg_time timestamp-> );
Query OK, 0 rows affected (0.02 sec)
-- 插入数据
mysql> insert into msg_tb(name, msg) values('杜甫', '会当临绝顶');
Query OK, 1 row affected (0.01 sec)mysql> insert into msg_tb(name, msg) values('杜甫', '一览众山小');
Query OK, 1 row affected (0.00 sec)mysql> select * from msg_tb;
+----+--------+-----------------+---------------------+
| id | name | msg | msg_time |
+----+--------+-----------------+---------------------+
| 1 | 杜甫 | 会当临绝顶 | 2023-11-25 15:59:08 |
| 2 | 杜甫 | 一览众山小 | 2023-11-25 15:59:18 |
+----+--------+-----------------+---------------------+
2 rows in set (0.00 sec)
要求:查找两分钟以内的留言信息
-- 查找一次
mysql> select name, msg from msg_tb where date_add(msg_time, interval 2 minute) >= now();
+--------+-----------------+
| name | msg |
+--------+-----------------+
| 杜甫 | 会当临绝顶 |
| 杜甫 | 一览众山小 |
+--------+-----------------+
2 rows in set (0.00 sec)
-- 再查找一次
mysql> select name, msg from msg_tb where date_add(msg_time, interval 2 minute) >= now();
+--------+-----------------+
| name | msg |
+--------+-----------------+
| 杜甫 | 会当临绝顶 |
| 杜甫 | 一览众山小 |
+--------+-----------------+
2 rows in set (0.00 sec)
-- 两分钟之后
mysql> select name, msg from msg_tb where date_add(msg_time, interval 2 minute) >= now();
Empty set (0.00 sec)
二、字符串函数
函数名称 | 描述 |
---|---|
charset(str) | 返回字符串字符集 |
concat(str1[, …]) | 连接字符串 |
instr(str, substr) | 返回substr在str中的位置,位置从1开始,没有返回0 |
ucase(str) upper(str) | 转换成大写 |
lcase(str) lower(str) | 转换成小写 |
left(str, length) right(str, length) | 从str左/右边取length个字符 |
length(str) | str的长度 |
replace(str, search_str, replace_str) | 在str中用replace_str替换search_str |
strcmp(str1, str2) | 逐字符比较两字符串大小 |
substring(str, pos[, length]) | 从str的pos位置取length个字符,默认取到结尾 |
ltrim(str) rtrim(str) trim(str) | 去掉前空格,后空格或者两边空格 |
查看字符串字符集
mysql> select charset('aaa');
+----------------+
| charset('aaa') |
+----------------+
| utf8 | -- utf8编码
+----------------+
1 row in set (0.00 sec)mysql> select charset('中国');
+-------------------+
| charset('中国') |
+-------------------+
| utf8 |
+-------------------+
1 row in set (0.00 sec)mysql> select charset(123);
+--------------+
| charset(123) |
+--------------+
| binary | -- 二进制编码
+--------------+
1 row in set (0.00 sec)
字符串连接
-- 两个字符串连接
mysql> select concat('a', 'b');
+------------------+
| concat('a', 'b') |
+------------------+
| ab |
+------------------+
1 row in set (0.00 sec)
-- 多个字符串连接
mysql> select concat('a', 'b', 'c');
+-----------------------+
| concat('a', 'b', 'c') |
+-----------------------+
| abc |
+-----------------------+
1 row in set (0.00 sec)
-- 数字转换为字符串进行拼接
mysql> select concat('a', 'b', 'c', 1234);
+-----------------------------+
| concat('a', 'b', 'c', 1234) |
+-----------------------------+
| abc1234 |
+-----------------------------+
1 row in set (0.00 sec)
查找字符串
-- 位置从1开始
mysql> select instr('abcd123efg', 'abc');
+----------------------------+
| instr('abcd123efg', 'abc') |
+----------------------------+
| 1 |
+----------------------------+
1 row in set (0.00 sec)
-- 不存在返回0
mysql> select instr('abcd123efg', 'aaa');
+----------------------------+
| instr('abcd123efg', 'aaa') |
+----------------------------+
| 0 |
+----------------------------+
1 row in set (0.00 sec)
大小写转换
-- 字符串转大写
mysql> select ucase('abcD');
+---------------+
| ucase('abcD') |
+---------------+
| ABCD |
+---------------+
1 row in set (0.00 sec)
-- 字符串转小写
mysql> select lcase('ABCD');
+---------------+
| lcase('ABCD') |
+---------------+
| abcd |
+---------------+
1 row in set (0.00 sec)
-- 字符串转大写
mysql> select upper('hello word');
+---------------------+
| upper('hello word') |
+---------------------+
| HELLO WORD |
+---------------------+
1 row in set (0.00 sec)
-- 字符串转小写
mysql> select lower('ABCdefG');
+------------------+
| lower('ABCdefG') |
+------------------+
| abcdefg |
+------------------+
1 row in set (0.00 sec)
子串提取
-- 从左边开始提取3个字符
mysql> select left('abcdefghhh3', 3);
+------------------------+
| left('abcdefghhh3', 3) |
+------------------------+
| abc |
+------------------------+
1 row in set (0.00 sec)
-- 从左边开始提取7个字符
mysql> select left('abcdefghhh3', 7);
+------------------------+
| left('abcdefghhh3', 7) |
+------------------------+
| abcdefg |
+------------------------+
1 row in set (0.00 sec)
-- 从右边开始提取3个字符
mysql> select right('abcdefghhh3', 3);
+-------------------------+
| right('abcdefghhh3', 3) |
+-------------------------+
| hh3 |
+-------------------------+
1 row in set (0.00 sec)
-- 从位置3开始提取到结尾
mysql> select substring('abcdefghhh3', 3);
+-----------------------------+
| substring('abcdefghhh3', 3) |
+-----------------------------+
| cdefghhh3 |
+-----------------------------+
1 row in set (0.00 sec)
-- 从位置1开始提取到结尾
mysql> select substring('abcdefghhh3', 1);
+-----------------------------+
| substring('abcdefghhh3', 1) |
+-----------------------------+
| abcdefghhh3 |
+-----------------------------+
1 row in set (0.00 sec)
-- 从位置1开始提取3个字符
mysql> select substring('abcdefghhh3', 1, 3);
+--------------------------------+
| substring('abcdefghhh3', 1, 3) |
+--------------------------------+
| abc |
+--------------------------------+
1 row in set (0.00 sec)
字符串长度
mysql> select length('abc');
+---------------+
| length('abc') |
+---------------+
| 3 |
+---------------+
1 row in set (0.00 sec)
-- 该数据库采用utf8编码,utf8为变长编码集,一个英文字母占一个字节,一个汉字占三个字节
-- 注意字节和字符:一个汉字是一个字符,一个汉字占三个字节
-- length求的是字符串所占字节长度
mysql> select length('中国');
+------------------+
| length('中国') |
+------------------+
| 6 |
+------------------+
1 row in set (0.00 sec)
-- 转换为字符串'123'求长度
mysql> select length(123);
+-------------+
| length(123) |
+-------------+
| 3 |
+-------------+
1 row in set (0.00 sec)
字符串替换
mysql> select replace('abc def abc', 'abc', 'hahaha') as replase;
+-------------------+
| replase |
+-------------------+
| hahaha def hahaha |
+-------------------+
1 row in set (0.00 sec)
-- 替换字符串不存在就不处理
mysql> select replace('abc def abc', 'abcdef', 'hahaha') as replase;
+-------------+
| replase |
+-------------+
| abc def abc |
+-------------+
1 row in set (0.00 sec)
字符串比较
-- str1 = str2
mysql> select strcmp('abc', 'abc');
+----------------------+
| strcmp('abc', 'abc') |
+----------------------+
| 0 |
+----------------------+
1 row in set (0.00 sec)
-- str1 > str2
mysql> select strcmp('abc', 'aaaa');
+-----------------------+
| strcmp('abc', 'aaaa') |
+-----------------------+
| 1 |
+-----------------------+
1 row in set (0.00 sec)
-- str1 < str2
mysql> select strcmp('abc', 'b');
+--------------------+
| strcmp('abc', 'b') |
+--------------------+
| -1 |
+--------------------+
1 row in set (0.00 sec)
消除左右空格
-- 字符串
mysql> select ' a bc ' as str;
+-------------------------+
| str |
+-------------------------+
| a bc |
+-------------------------+
1 row in set (0.00 sec)
-- 删去左边空格
mysql> select ltrim(' a bc ') as str;
+---------------+
| str |
+---------------+
| a bc |
+---------------+
1 row in set (0.00 sec)
-- 删去右边空格
mysql> select rtrim(' a bc ') as str;
+------------------+
| str |
+------------------+
| a bc |
+------------------+
1 row in set (0.00 sec)
-- 删去左右两边空格,中间不处理
mysql> select trim(' a bc ') as str;
+--------+
| str |
+--------+
| a bc |
+--------+
1 row in set (0.00 sec)
案例 - 1:姓名格式化
要求:姓名首字母大写,其他字母小写
-- 姓名数据
mysql> select * from name_tb;
+----------+
| name |
+----------+
| lihua |
| XiaoMing |
| ZHANGWEI |
+----------+
3 rows in set (0.00 sec)
-- 首字母拆分
mysql> select name, left(name, 1), substring(name, 1) from name_tb;
+----------+---------------+--------------------+
| name | left(name, 1) | substring(name, 1) |
+----------+---------------+--------------------+
| lihua | l | lihua |
| XiaoMing | X | XiaoMing |
| ZHANGWEI | Z | ZHANGWEI |
+----------+---------------+--------------------+
3 rows in set (0.00 sec)
-- 大小写转换
mysql> select name, ucase(left(name, 1)), lcase(substring(name, 2)) from name_tb;
+----------+----------------------+---------------------------+
| name | ucase(left(name, 1)) | lcase(substring(name, 2)) |
+----------+----------------------+---------------------------+
| lihua | L | ihua |
| XiaoMing | X | iaoming |
| ZHANGWEI | Z | hangwei |
+----------+----------------------+---------------------------+
3 rows in set (0.00 sec)
-- 拼接
mysql> select name, concat(ucase(left(name, 1)), lcase(substring(name, 2))) as 姓名 from name_tb;
+----------+----------+
| name | 姓名 |
+----------+----------+
| lihua | Lihua |
| XiaoMing | Xiaoming |
| ZHANGWEI | Zhangwei |
+----------+----------+
3 rows in set (0.00 sec)
案例 - 2:学生成绩通知
格式:XXX同学你好,你本次考试总分:XX,语文:XX,数学:XX,英语:XX。
-- 学生数据
mysql> select * from grade;
+----+-----------+--------+---------+------+---------+
| id | name | gander | chinese | math | english |
+----+-----------+--------+---------+------+---------+
| 1 | 齐静春 | 男 | 134 | 98 | 56 |
| 2 | 陈平安 | 男 | 174 | 80 | 77 |
| 3 | 魏山君 | 男 | 176 | 98 | 90 |
| 5 | 刘羡阳 | 男 | 140 | 90 | 45 |
| 6 | 陈迹 | 男 | 140 | 95 | 30 |
| 7 | 郑大风 | 男 | 150 | 95 | 30 |
| 8 | 宁姚 | 女 | 99 | 99 | 99 |
| 9 | 陈暖树 | 女 | 90 | 89 | 80 |
+----+-----------+--------+---------+------+---------+
8 rows in set (0.00 sec)
-- 先提取需要的信息
mysql> select name, chinese + math + english as 总分, chinese, math, english from grade;
+-----------+--------+---------+------+---------+
| name | 总分 | chinese | math | english |
+-----------+--------+---------+------+---------+
| 齐静春 | 288 | 134 | 98 | 56 |
| 陈平安 | 331 | 174 | 80 | 77 |
| 魏山君 | 364 | 176 | 98 | 90 |
| 刘羡阳 | 275 | 140 | 90 | 45 |
| 陈迹 | 265 | 140 | 95 | 30 |
| 郑大风 | 275 | 150 | 95 | 30 |
| 宁姚 | 297 | 99 | 99 | 99 |
| 陈暖树 | 259 | 90 | 89 | 80 |
+-----------+--------+---------+------+---------+
8 rows in set (0.00 sec)
-- 使用 concat 函数拼接信息
mysql> select concat(name, '同学你好, 你本次考试总分:', chinese + math + english, ', 语文:', chinese, ', 数学:', math, ', 英语:', english, '.') as 通知 -> from grade;
+-------------------------------------------------------------------------------------+
| 通知 |
+-------------------------------------------------------------------------------------+
| 齐静春同学你好, 你本次考试总分:288, 语文:134, 数学:98, 英语:56. |
| 陈平安同学你好, 你本次考试总分:331, 语文:174, 数学:80, 英语:77. |
| 魏山君同学你好, 你本次考试总分:364, 语文:176, 数学:98, 英语:90. |
| 刘羡阳同学你好, 你本次考试总分:275, 语文:140, 数学:90, 英语:45. |
| 陈迹同学你好, 你本次考试总分:265, 语文:140, 数学:95, 英语:30. |
| 郑大风同学你好, 你本次考试总分:275, 语文:150, 数学:95, 英语:30. |
| 宁姚同学你好, 你本次考试总分:297, 语文:99, 数学:99, 英语:99. |
| 陈暖树同学你好, 你本次考试总分:259, 语文:90, 数学:89, 英语:80. |
+-------------------------------------------------------------------------------------+
8 rows in set (0.00 sec)
三、数学函数
函数名称 | 描述 |
---|---|
abs(number) | 绝对值函数 |
bin(decimal_number) | 十进制转二进制 |
hex(decimal_number) | 十进制转十六进制 |
conv(number, from_base, to_base) | 进制转换 |
ceiling(number) | 向上取整 |
floor(number) | 向下取整 |
format(number, decimal_places) | 格式化,保留小数位数 |
rand() | 返回随机浮点数,范围[0.0, 1.0) |
mod(number, denominator) | 取模,求余 |
绝对值
mysql> select abs(10);
+---------+
| abs(10) |
+---------+
| 10 |
+---------+
1 row in set (0.00 sec)mysql> select abs(-10);
+----------+
| abs(-10) |
+----------+
| 10 |
+----------+
1 row in set (0.00 sec)mysql> select abs(-10.01);
+-------------+
| abs(-10.01) |
+-------------+
| 10.01 |
+-------------+
1 row in set (0.04 sec)
进制转换
-- 十进制到二进制
mysql> select bin(2);
+--------+
| bin(2) |
+--------+
| 10 |
+--------+
1 row in set (0.00 sec)mysql> select bin(4);
+--------+
| bin(4) |
+--------+
| 100 |
+--------+
1 row in set (0.00 sec)mysql> select bin(15);
+---------+
| bin(15) |
+---------+
| 1111 |
+---------+
1 row in set (0.00 sec)
-- 十进制到十六进制
mysql> select hex(15);
+---------+
| hex(15) |
+---------+
| F |
+---------+
1 row in set (0.00 sec)
-- 自定义进制转换:十进制到二进制
mysql> select conv(15, 10, 2);
+-----------------+
| conv(15, 10, 2) |
+-----------------+
| 1111 |
+-----------------+
1 row in set (0.00 sec)
-- 自定义进制转换:二进制到十进制
mysql> select conv(1111, 2, 10);
+-------------------+
| conv(1111, 2, 10) |
+-------------------+
| 15 |
+-------------------+
1 row in set (0.00 sec)
取整规则
-- 向上取整
mysql> select ceiling(10.2);
+---------------+
| ceiling(10.2) |
+---------------+
| 11 |
+---------------+
1 row in set (0.00 sec)
-- 向上取整
mysql> select ceiling(10.9);
+---------------+
| ceiling(10.9) |
+---------------+
| 11 |
+---------------+
1 row in set (0.00 sec)
-- 向下取整
mysql> select floor(10.2);
+-------------+
| floor(10.2) |
+-------------+
| 10 |
+-------------+
1 row in set (0.00 sec)
-- 向下取整
mysql> select floor(10.9);
+-------------+
| floor(10.9) |
+-------------+
| 10 |
+-------------+
1 row in set (0.00 sec)
-- 创建测试表
mysql> create table int_tb(-> num int-> );
Query OK, 0 rows affected (0.02 sec)mysql> insert into int_tb values(10), (10.2), (10.5), (10.9);
Query OK, 4 rows affected (0.01 sec)
Records: 4 Duplicates: 0 Warnings: 0
-- 四舍五入
mysql> select * from int_tb;
+------+
| num |
+------+
| 10 |
| 10 |
| 11 |
| 11 |
+------+
4 rows in set (0.00 sec)
// 向0取整,比如C语言:
int num1 = 10.9; // num1 实际等于10,直接丢弃小数位
int num2 = 10.2; // num2 实际等于10
格式化小数位
-- 保留两位小数
mysql> select format(1.23456, 2);
+--------------------+
| format(1.23456, 2) |
+--------------------+
| 1.23 | -- 四舍五入
+--------------------+
1 row in set (0.00 sec)
-- 保留三位小数
mysql> select format(1.23456, 3);
+--------------------+
| format(1.23456, 3) |
+--------------------+
| 1.235 | -- 四舍五入
+--------------------+
1 row in set (0.00 sec)
-- 保留十位小数
mysql> select format(1.23456, 10);
+---------------------+
| format(1.23456, 10) |
+---------------------+
| 1.2345600000 |
+---------------------+
1 row in set (0.00 sec)
随机数
mysql> select rand();
+--------------------+
| rand() |
+--------------------+
| 0.5852513821658225 |
+--------------------+
1 row in set (0.00 sec)mysql> select rand();
+---------------------+
| rand() |
+---------------------+
| 0.09648454384550875 |
+---------------------+
1 row in set (0.00 sec)mysql> select rand() * 100;
+------------------+
| rand() * 100 |
+------------------+
| 72.6668603463721 |
+------------------+
1 row in set (0.00 sec)
取模
-- 101 % 10 = 10 ... 1
mysql> select mod(101, 10);
+--------------+
| mod(101, 10) |
+--------------+
| 1 |
+--------------+
1 row in set (0.00 sec)
案例-1:产生0 ~ 100随机数
要求:0 ~ 100的整数
-- format 函数截取整数部分
mysql> select format(rand() * 100, 0);
+-------------------------+
| format(rand() * 100, 0) |
+-------------------------+
| 34 |
+-------------------------+
1 row in set (0.00 sec)mysql> select format(rand() * 100, 0);
+-------------------------+
| format(rand() * 100, 0) |
+-------------------------+
| 54 |
+-------------------------+
1 row in set (0.00 sec)
-- ceiling 向上取整
mysql> select ceiling(rand() * 100);
+-----------------------+
| ceiling(rand() * 100) |
+-----------------------+
| 47 |
+-----------------------+
1 row in set (0.00 sec)
四、其他函数
函数名称 | 描述 |
---|---|
user() | 查询当前用户 |
datebase() | 显示当前正在使用的数据库 |
md5(str) | 对一个字符串进行md5摘要,摘要后得到一个32位字符串 |
password(str) | MySQL使用该函数对用户数据进行加密 |
ifnull(val1, val2) | 如果val1为null,返回val2,否则返回val1 |
查询当前用户
mysql> select user();
+----------------+
| user() |
+----------------+
| root@localhost |
+----------------+
1 row in set (0.00 sec)
查询当前正在使用的数据库
mysql> select database();
+------------+
| database() |
+------------+
| db2 |
+------------+
1 row in set (0.00 sec)
-- 使用数据库 db1
mysql> use db1;
Database changedmysql> select database();
+------------+
| database() |
+------------+
| db1 |
+------------+
1 row in set (0.00 sec)
数据加密
-- 创建操作表
mysql> create table user_tb(-> name varchar(20),-> passwd varchar(32)-> );
Query OK, 0 rows affected (0.03 sec)
-- 插入数据
mysql> insert into user_tb(name, passwd) values('张三', '123456');
Query OK, 1 row affected (0.01 sec)mysql> insert into user_tb(name, passwd) values('李四', '012345');
Query OK, 1 row affected (0.01 sec)
-- 如果对数据不做任何处理,用户的密码明文保存,如果公司数据库遭到攻击,用户的信息就会被轻而易举的窃取
mysql> select * from user_tb;
+--------+--------+
| name | passwd |
+--------+--------+
| 张三 | 123456 |
| 李四 | 012345 |
+--------+--------+
2 rows in set (0.00 sec)
-- md5() 加密
mysql> update user_tb set passwd = md5(123456) where name = '张三';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0mysql> select * from user_tb;
+--------+----------------------------------+
| name | passwd |
+--------+----------------------------------+
| 张三 | e10adc3949ba59abbe56e057f20f883e |
| 李四 | 012345 |
+--------+----------------------------------+
2 rows in set (0.00 sec)
-- 根据密码进行查找
mysql> select name, passwd from user_tb where passwd = '123456';
Empty set (0.00 sec)mysql> select name, passwd from user_tb where passwd = md5('123456');
+--------+----------------------------------+
| name | passwd |
+--------+----------------------------------+
| 张三 | e10adc3949ba59abbe56e057f20f883e |
+--------+----------------------------------+
1 row in set (0.00 sec)
-- password对密码要求的更加严格:必须包含大小写字母,数字以及特殊字符
mysql> insert into user_tb values('王五', password('123456'));
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements -- 密码不符合要求mysql> insert into user_tb values('王五', password('123456wwDD'));
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements -- 密码不符合要求mysql> insert into user_tb values('王五', password('12345dwdAWDAW@Q#$6'));
Query OK, 1 row affected, 1 warning (0.01 sec)mysql> insert into user_tb values('赵六', password('6666@WWdd.'));
Query OK, 1 row affected, 1 warning (0.01 sec)mysql> select * from user_tb;
+--------+-------------------------------------------+
| name | passwd |
+--------+-------------------------------------------+
| 张三 | e10adc3949ba59abbe56e057f20f883e |
| 李四 | 012345 |
| 王五 | *67B40CCC0ED5939458DAF14EE1D77178C9615DFE |
| 赵六 | *94718C7C8D922CC41364D274CA13EEC71A67777B |
+--------+-------------------------------------------+
4 rows in set (0.00 sec)
md5与password对比:
md5和password都可以对数据进行加密,
md5加密后生成32位字符串
password加密后生成41位字符串
md5对进行加密的字符串无要求
password要求进行加密的字符串必须包含:大小写字母,数字以及特殊字符
MySQL对用户信息加密时一般都使用password
ifnull条件判断
-- str1 为null,输出str2
mysql> select ifnull(null, 123);
+-------------------+
| ifnull(null, 123) |
+-------------------+
| 123 |
+-------------------+
1 row in set (0.00 sec)
-- str1 为null,输出str2
mysql> select ifnull(null, null);
+--------------------+
| ifnull(null, null) |
+--------------------+
| NULL |
+--------------------+
1 row in set (0.00 sec)
-- str1 不为null,输出str1
mysql> select ifnull(666, 123);
+------------------+
| ifnull(666, 123) |
+------------------+
| 666 |
+------------------+
1 row in set (0.00 sec)
类似于这样使用的C语言的三目操作符: exp1 ? exp1 : exp2;
相关文章:
【MySQL内置函数】
目录: 前言一、日期函数获取日期获取时间获取时间戳在日期上增加时间在日期上减去时间计算两个日期相差多少天当前时间案例:留言板 二、字符串函数查看字符串字符集字符串连接查找字符串大小写转换子串提取字符串长度字符串替换字符串比较消除左右空格案…...
C++相关闲碎记录(14)
1、数值算法 (1)运算后产生结果accumulate() #include "algostuff.hpp"using namespace std;int main() {vector<int> coll;INSERT_ELEMENTS(coll, 1, 9);PRINT_ELEMENTS(coll);cout << "sum: " << accumulate(…...
18、vue3(十八):菜单权限,按钮权限,打包,发布nginx
目录 一、菜单权限和路由拆分 1.思路分析 2.深拷贝插件 3.代码实现 4.效果展示...
04 在Vue3中使用setup语法糖
概述 Starting from Vue 3.0, Vue introduces a new syntactic sugar setup attribute for the <script> tag. This attribute allows you to write code using Composition API (which we will discuss further in Chapter 5, The Composition API) in SFCs and shorte…...
vite+ts——user.ts——ts接口定义+axios请求的写法
import axios from axios; import qs from query-string; import {UserState} from /store/modules/user/types;export interface LoginData{username:string;password:string;grant_type?:string;scope?:string;client_id?:string;client_secret?:string;response_type?:…...
环境搭建及源码运行_java环境搭建_mysql安装
书到用时方恨少、觉知此时要躬行;拥有技术,成就未来,抖音视频教学地址: 1、介绍 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle旗下产品。MySQL是最…...
Android camera的metadata
一、实现 先看一下metadata内部是什么样子: 可以看出,metadata 内部是一块连续的内存空间。 其内存分布大致可概括为: 区域一 :存 camera_metadata_t 结构体定义,占用内存 96 Byte 区域二 :保留区&#x…...
ElasticSearch面试题
1.介绍下es的架构? es采用的是分布式的架构,es集群中会有多个结点,而结点的角色主要有下面几种。 协调结点: 请求路由能力,将请求内容将请求转发给对应的结点进行处理。 master结点: 结点管理ÿ…...
C++ 数据结构知识点合集-C/C++ 数组允许定义可存储相同类型数据项的变量-供大家学习研究参考
#include <iostream> #include <cstring>using namespace std;// 声明一个结构体类型 Books struct Books {char title[50];char author[50];char subject[100];int book_id; };int main( ) {Books Book1; // 定义结构体类型 Books 的变量 Book1Books …...
【机器学习】5分钟掌握机器学习算法线上部署方法
5分钟掌握机器学习算法线上部署方法 1. 三种情况2. 如何转换PMML,并封装PMML2.1 什么是PMML2.2 PMML的使用方法范例3. 各个算法工具的工程实践4. 只用Linux的Shell来调度模型的实现方法5. 注意事项参考资料本文介绍业务模型的上线流程。首先在训练模型的工具上,一般三个模型训…...
Vue3-21-组件-子组件给父组件发送事件
情景描述 【子组件】中有一个按钮,点击按钮,触发一个事件, 我们希望这个事件的处理逻辑是,给【父组件】发送一条消息过去, 从而实现 【子组件】给【父组件】通信的效果。这个问题的解决就是 “发送事件” 这个操作。 …...
[密码学]AES
advanced encryption standard,又名rijndael密码,为两位比利时数学家的名字组合。 分组为128bit,密钥为128/192/256bit可选,对应加密轮数10/12/14轮。 基本操作为四种: 字节代换(subBytes transformatio…...
CentOS 7 部署pure-ftp
文章目录 (1)简介(2)准备工作(3)更新系统(4)安装依赖环境(5)下载和解压pure-ftp源码包(6)编译和安装pure-ftp(7࿰…...
Vue2-动态组件案例
1.component介绍 说明: Type: string | ComponentDefinition | ComponentConstructor Explanation: String: 如果你传递一个字符串给 is,它会被视为组件的名称,用于动态地渲染不同类型的组件。这是一个在运行时动态切换组件类型的常见用例。…...
【源码】车牌检测+QT界面+附带数据库
目录 1、基本介绍2、基本环境3、核心代码3.1、车牌识别3.2、车牌定位3.3、车牌坐标矫正 4、界面展示4.1、主界面4.2、车牌检测4.3、查询功能 5、演示6、链接 1、基本介绍 本项目采用tensorflow,opencv,pyside6和pymql编写,pyside6用来编写UI界…...
实战1-python爬取安全客新闻
一般步骤:确定网站--搭建关系--发送请求--接受响应--筛选数据--保存本地 1.拿到网站首先要查看我们要爬取的目录是否被允许 一般网站都会议/robots.txt目录,告诉你哪些地址可爬,哪些不可爬,以安全客为例子 2. 首先测试在不登录的…...
光栅化渲染:可见性问题和深度缓冲区算法
在前面第二章中,我们了解到,在投影点(屏幕空间中的点)的第三个坐标中,我们存储原始顶点 z 坐标(相机空间中点的 z 坐标): 当一个像素与多个三角形重叠时,查找三角形表面上…...
docker入门小结
docker是什么?它有什么优势? 快速获取开箱即用的程序 docker使得所有的应用传输就像我们日常通过聊天工具文件传输一样,发送方将程序传输到超级码头而接收方也只需通过超级码头进行获取即可,就像一只鲸鱼拖着货物来回运输一样。…...
LLM Agent发展演进历史(观看metagpt视频笔记)
LLM相关的6篇重要的论文,其中4篇来自谷歌,2篇来自openai。技术路径演进大致是:SSL (Self-Supervised Learning) -> SFT (Supervised FineTune) IT (Instruction Tuning) -> RLHF。 word embedding的问题:新词如何处理&…...
Linux(操作系统)面经——part2
1、请你说说进程和线程的区别 1.进程是操作系统资源分配和调度的最小单位,实现操作系统内部的并发;线程是进程的子任务,cpu可以识别、执行的最小单位,实现程序内部的并发。 2.一个进程最少有一个线程或有多个,一个线程…...
Flink系列之:WITH clause
Flink系列之:WITH clause 适用流、批提供了一种编写辅助语句以在较大查询中使用的方法。这些语句通常称为公共表表达式 (CTE),可以被视为定义仅针对一个查询而存在的临时视图。 WITH 语句的语法为: WITH <with_item_definition> [ , …...
JMeter直连数据库
JMeter直连数据库 使用场景操作步骤 使用场景 用作请求的参数化 登录时需要的用户名,密码可以从数据库中查询获取 用作结果的断言 添加购物车下订单,检查接口返回的订单号,是否与数据库中生成的订单号一致 清理垃圾数据 添加商品后ÿ…...
Linux部署MySQL5.7和8.0版本 | CentOS和Ubuntu系统详细步骤安装
一、MySQL数据库管理系统安装部署【简单】 简介 MySQL数据库管理系统(后续简称MySQL),是一款知名的数据库系统,其特点是:轻量、简单、功能丰富。 MySQL数据库可谓是软件行业的明星产品,无论是后端开发、…...
STL中set和multiset容器的用法(轻松易懂~)
目录 1. 基本概念 2. 构造和赋值 3. 大小和交换 4. 插入 和 删除 5. 统计 和 查找 6. set容器的排序 1. 基本概念 set和multiset属于关联式容器,底层结构式二叉树,所有元素都会在插入时自动排序。 如果你对容器的概念,或是二叉树不太了…...
Codeforces Round 915 (Div. 2)
Constructive Problems(Problem - A - Codeforces) 题目大意:现在有一片城市被摧毁了,需要进行重建,当一个城市水平相邻和竖直相邻的位置都至少有一个城市的时候,该城市可以被重建。所有城市排成n行m列的矩…...
C语言经典错误总结(三)
一.指针与数组理解 我们都知道定义一个数组然后对其进行各种想要的操作,但是你真的能够区分那些是对数组的操作,那些是通过指针实现的吗? 例如;arr[1]10;这个是纯粹对数组操作实现的吗? 答案肯定不是,实际上我们定义…...
Ubuntu系统入门指南:基础操作和使用
Ubuntu系统的基础操作和使用 一、引言二、安装Ubuntu系统三、Ubuntu系统的基础操作3.1、界面介绍3.2、应用程序的安装和卸载3.3、文件管理3.4、系统设置 四、Ubuntu系统的日常使用4.1、使用软件中心4.2、浏览器的使用和网络连接设置4.3、邮件客户端的配置和使用4.4、文件备份和…...
MyBatis原理解读
我们项目中多用MyBatis进行数据库的读写,开源的MyBatis-Plus框架对其进行了增强,使用上更加简单,我们之前的很多项目也是直接用的MyBatis-Plus。 数据库操作的时候,简单的单表读写,我们可以直接在方法里链式组装SQL,复杂的SQL或涉及多表联合join的,需要在xml手写SQL语句…...
Linux---文本搜索命令
1. grep命令的使用 命令说明grep文本搜索 grep命令效果图: 2. grep命令选项的使用 命令选项说明-i忽略大小写-n显示匹配行号-v显示不包含匹配文本的所有行 -i命令选项效果图: -n命令选项效果图: -v命令选项效果图: 3. grep命令结合正则表达式的使用 正则表达式说明^以指…...
Unity中Shader语义的理解
前言 以下内容主要是个人理解,如有错误,欢迎严厉批评指正。 一、语义的形式在Shader中是必要的吗? 不是必要的。 使用HLSL和CG语言来编写Shader需要语义,使用GLSL编写Shader不需要。 二、语义的意义? 语义是什么&…...
如何安装 wordpress/在线培训网站
[mysql] # 设置mysql客户端默认字符集 default-character-setutf8[mysqld] #设置3306端口 port 3306 # 设置mysql的安装目录 basedirI:\数据库\数据库3\mysql-5.7.21-winx64\mysql-5.7.21-winx64 # 设置mysql数据库的数据的存放目录 datadirI:\数据库\数据库3\mysql-5.7.21-w…...
模板网站建设平台/如何把网站推广出去
很多同学兴许有这样的烦恼,就是对于自己文件夹中的相似的图片想删除,可是奈何图片太多,所以手动删除太浪费时间了,那么今天学到这段代码,就不需要手动了。 如下是我对视频截取的一些帧,我通过算法将这些相似…...
云南人事考试网官网/如何做网站seo排名优化
题目大意:多组数据,每组数据给一张图,多组询问,每个询问给一个点集,要求删除一个点,使得至少点集中的两个点互不连通,输出方案数 题解:圆方树,发现使得两个点不连通的方案…...
免费咨询健康/seo技术博客
一、数据概况 今天分享一份西北地区的POI数据,包含陕西省、甘肃省、青海省、宁夏回族自治区、新疆维吾尔自治区5个省级行政单位。 数据时间为2022年11月,坐标系是GCJ-02。 获取方式在文末,有兴趣的小伙伴自取。 陕西省POI数据可视化西安市…...
wordpress设置安全/成都网站seo外包
2019独角兽企业重金招聘Python工程师标准>>> 对工具类的功能来说,与其在微信中找各种接口不如直接调用其他wap站更好,(http://r2.mo.baidu.com/webapp_html.php?version4_0&fnwebpage_flash)有一些wap站可以参考&…...
织梦做的网站如何放在网上/武汉百度搜索优化
每个寄存器在理论上都可以从RAM读取信息或将信息写入RAM中,ALU算数逻辑单元,它很容易4个字节上进行加法减法移位操作。...