我看到了那天的夕阳,美得如此骄艳,我便决定,追寻夕阳,拼尽余生。

上一章简单介绍了 MySQL的条件判断函数(十三),如果没有看过,​​请观看上一章​​

一.一 MySQL的其他函数

MySQL除了常见的,数学函数,字符串函数,日期/时间函数,还有一些其他的函数,如 系统信息函数,加密解密函数等。 现将其他的函数,统一进行讲解。

讲解的函数主要有:

  • 系统信息函数
  • 加密/解密函数
  • 进制转换函数
  • ip与数字转换函数
  • 类型转换函数
  • 格式化函数

其中,系统信息函数有:

函数

作用

举例

举例结果

versison()

查询版本号

select version()

5.7.13

connection_id()

查询连接id

select connection_id()

8

database()

查询目前所使用的数据库

select database()

yuejl

schema()

查询数据库

select schema()

yuejl

user()

查询登录的用户

select user()

root

current_user()

查询登录的用户

select current_user()

root

system_user()

查询登录的用户

select system_user()

root

session_user()

查询登录的用户

select session_user()

root

charset(str)

获取字符串的字符集

select charset(‘abc123’)

gbk

collation(str)

获取字符串的排序方式

select collation(‘abc123’)

gbk_chinese_ci

last_insert_id()

获取最后生成的id值

select last_insert_id()

1

加密解密函数有:

函数

作用

举例

举例结果

password(str)

加密字符串str

select password(‘abc123’)

*6691484EA6B50DDDE1926A220DA01FA9E575C18A

md5(str)

md5方式加密

select md5(‘abc123’)

e99a18c428cb38d5f260853678922e03

encode(str,ps_str)

固定字符串加密

select encode(‘abc123’,‘A’)

<黟‹

decode(str,ps_str)

固定字符串解密

select decode(encode(‘abc123’,‘A’),‘A’)

abc123

其他函数:

函数

作用

举例

举例结果

format(num,n)

格式化数字

select format(1234.234.2)

1,234.23

conv(num,from_base,to_base)

select conv(‘F’,16,10)

15

bin(num)

将十进制转换二进制

bin(7)

111

oct(num)

将十进制转换成八进制

oct(10)

12

hex(num)

将十进制转换成十六进制

hex(15)

F

inet_aton(ip字符串)

将ip地址转换成数字

select inet_aton(‘127.0.0.1’)

2130706433

inet_ntoa(数字)

将数字转换成ip地址

select inet_ntoa(2130706433)

127.0.0.1

convert(str using 新的编码)

转换字符串的编码

select charset(convert(‘abc’ using utf8))

utf8

cast(x as type)

改变数据类型

select cast(10 as char(4))

10

convert(x ,type)

改变数据类型

select convert(10,char(4))

10

二. 系统信息函数

二.一 查看MySQL的版本号 version()

select version();

MySQL的系统信息函数和加密解密函数(十四)_MySQL的系统信息函数


老蝴蝶所用的版本是 5.7.13版本。

二.二 查询连接id connection_id()

select connection_id();

MySQL的系统信息函数和加密解密函数(十四)_MySQL的加密解密函数_02

查询出来的是连接的 id.

每一个用户连接数据库时,都会有一个唯一id,进行相应的区分。 注意,这个id 并不是从1 按照从小到大排列的。 会根据登录的次数,而有不同。

可以通过 processlist 命令来详细的查询。

show processlist;

MySQL的系统信息函数和加密解密函数(十四)_MySQL的系统信息函数_03

processlist 命令不仅可以查询当前有哪些线程在运行, 当前的所有的连接数,还可以显示当前的连接的状态,帮助识别有问题的查询语句。

其中,如果是root 管理员用户的话,可以查询全部的用户的信息。 如果是普通的用户的话,只能显示该用户的信息。

如果用户过多的话, 可以使用 show full processlist ; 命令来查询全部。 show processlist 默认只列出前100条记录。

show full processlist;

MySQL的系统信息函数和加密解密函数(十四)_MySQL的进制转换函数_04

各个列的含义如下:

  1. id 列 用户登录Mysql时,系统自动分配的 connection id, 即 select connection_id() 函数的返回值。
  2. user 列。 显示当前登录的用户。 如果是root管理员,就显示root.
    如果不是root,就显示用户权限范围内的sql语句。
  3. host 列 显示这条语句是从哪个ip的哪个端口发出的。 按照 ip:端口 的格式展示。 端口,并不是mysql的端口3306.
  4. db 列 目前这个进程连接的是哪个数据库。 如果没有使用数据库,显示null
  5. Command 列 当前连接执行的命令,取值为 休眠 (Sleep), 查询(Query),连接(Connect)
  6. Time 列显示这个状态持续的时间,单位是秒
  7. State 列 显示当前连接的sql语句的状态。
  8. info 列 显示这个SQL语句,是判断问题语句的一个重要依据。

二.三 查询当前使用的数据库 database() 和 schema()

use yuejl();

数据库。

select database();

或者:

select schema();

MySQL的系统信息函数和加密解密函数(十四)_MySQL的格式化函数_05

二.四 获取用户名 user();

可以用以下四个函数

  • user()
  • current_user()
  • system_user()
  • session_user()

一般情况下,这四个函数查询出来的值是相同的。

select user(),current_user(),system_user(),session_user();

MySQL的系统信息函数和加密解密函数(十四)_MySQL的格式化函数_06

返回的是,连接服务器的用户名及当前的主机。 root为用户名,localhost为主机。

二.五 获取字符串的字符集 charset(str)

可以获取字符串的字符集, 常见的为 utf8, gbk, 默认的为 latin1。

老蝴蝶默认的是gbk

select charset('岳泽霖'),charset(convert('岳泽霖' using gbk)),charset(convert('岳泽霖' using latin1));

MySQL的系统信息函数和加密解密函数(十四)_MySQL的格式化函数_07

其中, convert(str using 新编码方式) 是 改变字符串的编码方式。

常常在创建数据库时,指定数据库的字符集。

二.六 字符串的排序方式 collation(str)

获取字符串的排列方式。 一般返回 编码方式_general_ci

select collation('两个蝴蝶飞'),collation(convert('两个蝴蝶飞' using utf8)),
collation(convert('两个蝴蝶飞' using latin1));

MySQL的系统信息函数和加密解密函数(十四)_字符串_08

常常在创建数据库时,指定数据库的排序方式。

二.七 获取最后一个生成的id 值 last_insert_id()

常常用于插入数据之前,获取最大的自动增长的id() 值。 如MyBatis的插入id值。

1 .为了演示,先创建一个数据表 teacher, 使用yuejl数据库。 是自动增长的。

user yuejl;

create table teacher(
id int(11) primary key auto_increment,
name varchar(20)
);

MySQL的系统信息函数和加密解密函数(十四)_MySQL的进制转换函数_09

2 . 先插入第一条数据,再查询

insert into teacher(name) values('两个蝴蝶飞');

插入成功, 查询id

select last_insert_id();

MySQL的系统信息函数和加密解密函数(十四)_MySQL的格式化函数_10

查询出id 值为1.

3 . 再次插入一条数据,然后查询

insert into teacher(name) values('岳泽霖');

再次查询

select last_insert_id();

MySQL的系统信息函数和加密解密函数(十四)_MySQL的进制转换函数_11

4 . 批量插入时的增长

insert into teacher(name) values ('a'),('b'),('c');

再次查询

select last_insert_id();

MySQL的系统信息函数和加密解密函数(十四)_MySQL的加密解密函数_12


查询后,并不是5, 而是3.

在批量插入之前,下一个值是3, 获取的是插入 name=a 记录时的id.

即如果插入多行记录时,只返回插入第一行时所返回的值。

5 . 修改时 不变。

update teacher set name='修改后的值' where id=1;

再查询

select last_insert_id();

MySQL的系统信息函数和加密解密函数(十四)_MySQL的格式化函数_13

6 . last_insert_id() 的值只与最近查询的那个表有关。 如果此时再有一个自动增长的 user 表,
往teacher表再添加一条记录,那么 last_insert_id() 变成了4.
这时,再往 user() 表插入一条数据,
那么这个时候,last_insert_id() 就与 user 表相关了,变成了1.

三. 加解密函数

三.一 password(str) 加密

是单向加密,且不可逆的。 常常用于MySQL服务器加密。

如果加密的字符串为null,那么将返回 空字符串.

select password('abc123'),password('两个蝴蝶飞'),password(null);

MySQL的系统信息函数和加密解密函数(十四)_字符串_14

三.二 md5(str) MD5方式加密

采用Md5的方式进行加密

select md5('abc123'),md5('123456');

MySQL的系统信息函数和加密解密函数(十四)_MySQL的格式化函数_15

三.三 encode(str,ps_str) 固定字符串加密

以 ps_str 字符串为密钥,进行加密 str字符串。 可以让用户自定义加密方式。

select encode('abc123','A'),encode('abc123','ABC');

MySQL的系统信息函数和加密解密函数(十四)_MySQL的格式化函数_16

三.四 decode(str,ps_str) 固定字符串解密

以ps_str字符串为密钥,进行解密 str字符串。 与encode(str,ps_str)互为反函数

select decode(encode('abc123','A'),'A'),decode(encode('abc123','ABC'),'ABC');

MySQL的系统信息函数和加密解密函数(十四)_MySQL的格式化函数_17

可以正好返回以前要加密的字符串。

四. 其他函数

四.一 格式化数字 format(num,n)

格式化数字 num, 返回 n位小数, 四舍五入的方式进行获取。

select format(1234.234,2),format(1234.236,2),format(12.23423,1),format(123.22,0),format(123.23,-1);

MySQL的系统信息函数和加密解密函数(十四)_MySQL的系统信息函数_18

发现, -1 值不起作用。 即 n>=0.

要想使 -1起作用,可以用 数学函数里面的 round(x,-1) 函数进行处理。

四.二 conv(num,from_base,to_base) 进制转换

其中,最小为二进制。

select conv('F',16,10),conv(7,10,2),conv(9,10,8),conv(1010,2,10);

MySQL的系统信息函数和加密解密函数(十四)_MySQL的进制转换函数_19

四.三 bin(num) 将十进制数字转换成二进制

select bin(7),bin(4),bin(10);

MySQL的系统信息函数和加密解密函数(十四)_MySQL的格式化函数_20

四.四 oct(num) 将十进制数字转换成八进制

select oct(7),oct(10),oct(15);

MySQL的系统信息函数和加密解密函数(十四)_MySQL的系统信息函数_21

四.五 hex(num) 将十进制数字转换成十六进制

select hex(9),hex(10),hex(15);

MySQL的系统信息函数和加密解密函数(十四)_MySQL的格式化函数_22

四.六 inet_aton(ip字符串) ip地址转换成数字

其中, inet 为internet 的简写。

aton 为 address to num.

select inet_aton('127.0.0.1'),inet_aton('10.1.1.121');

MySQL的系统信息函数和加密解密函数(十四)_字符串_23

值分别为 2130706433,和 167838073

为 数字结果=第一个值256^3 +第二个值256^2 + 第三个值*256^1+ 第四个值。

四.七 inet_ntoa(数字) 将数字转换成ip地址

与 inet_aton(ip字符串) 互为反函数。

ntoa 为 num to address.

select inet_ntoa(2130706433),inet_ntoa(167838073);

MySQL的系统信息函数和加密解密函数(十四)_字符串_24

四.八 convert(str using 新的编码) 转换字符串的编码

可以改变字符串的编码

要借助一下 charset(str) 函数进行验证。

select charset('岳泽霖'),charset(convert('岳泽霖' using gbk)),
charset(convert('岳泽霖' using latin1));

MySQL的系统信息函数和加密解密函数(十四)_MySQL的格式化函数_07

四.九 cast(x as type),convert(x,type) 改变数据类型

可以改变数据类型,但前堤是两个数据类型可以相互转换。

其中,转换成类型 type 可以的取值有:

type取值

表示意义

char(n)

字符串型

date

日期型

time

时间型

datetime

日期和时间型

decimal

float浮点型

signed

int类型

select cast(10 as char(4)),cast('1234' as signed),
convert(10,char(4)),convert('1234',signed);

MySQL的系统信息函数和加密解密函数(十四)_MySQL的进制转换函数_26

谢谢!!!