一.一 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 charset(‘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();
老蝴蝶所用的版本是 5.7.13版本。
二.二 查询连接id connection_id()
select connection_id();
- 查询出来的是连接的 id.
- 每一个用户连接数据库时,都会有一个唯一id,进行相应的区分。 注意,这个id 并不是从1 按照从小到大排列的。 会根据登录的次数,而有不同。
- 可以通过 processlist 命令来详细的查询。
show processlist;
- processlist 命令不仅可以查询当前有哪些线程在运行, 当前的所有的连接数,还可以显示当前的连接的状态,帮助识别有问题的查询语句。
- 其中,如果是root 管理员用户的话,可以查询全部的用户的信息。 如果是普通的用户的话,只能显示该用户的信息。
- 如果用户过多的话, 可以使用 show full processlist ; 命令来查询全部。 show processlist 默认只列出前100条记录。
show full processlist;
- 各个列的含义如下:
- id 列 用户登录Mysql时,系统自动分配的 connection id, 即 select connection_id() 函数的返回值。
- user 列。 显示当前登录的用户。 如果是root管理员,就显示root.
- 如果不是root,就显示用户权限范围内的sql语句。
- host 列 显示这条语句是从哪个ip的哪个端口发出的。 按照 ip:端口 的格式展示。 端口,并不是mysql的端口3306.
- db 列 目前这个进程连接的是哪个数据库。 如果没有使用数据库,显示null
- Command 列 当前连接执行的命令,取值为 休眠 (Sleep), 查询(Query),连接(Connect)
- Time 列显示这个状态持续的时间,单位是秒
- State 列 显示当前连接的sql语句的状态。
- info 列 显示这个SQL语句,是判断问题语句的一个重要依据。
二.三 查询当前使用的数据库 database() 和 schema()
用 use yuejl(); 数据库。 select database(); 或者: select schema();
二.四 获取用户名 user();
可以用以下四个函数
- user()
- current_user()
- system_user()
- session_user()
一般情况下,这四个函数查询出来的值是相同的。
select user(),current_user(),system_user(),session_user();
- 返回的是,连接服务器的用户名及当前的主机。 root为用户名,localhost为主机。
二.五 获取字符串的字符集 charset(str)
- 可以获取字符串的字符集, 常见的为 utf8, gbk, 默认的为 latin1。
- 老蝴蝶默认的是gbk
select charset('岳泽霖'),charset(convert('岳泽霖' using gbk)),charset(convert('岳泽霖' using latin1));
- 其中, convert(str using 新编码方式) 是 改变字符串的编码方式。
- 常常在创建数据库时,指定数据库的字符集。
二.六 字符串的排序方式 collation(str)
- 获取字符串的排列方式。 一般返回 编码方式_general_ci
select collation('两个蝴蝶飞'),collation(convert('两个蝴蝶飞' using utf8)), collation(convert('两个蝴蝶飞' using latin1));
- 常常在创建数据库时,指定数据库的排序方式。
二.七 获取最后一个生成的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) );
2 . 先插入第一条数据,再查询
insert into teacher(name) values('两个蝴蝶飞');
- 插入成功, 查询id
select last_insert_id();
- 查询出id 值为1.
3 . 再次插入一条数据,然后查询
insert into teacher(name) values('岳泽霖');
- 再次查询
select last_insert_id();
4 . 批量插入时的增长
insert into teacher(name) values ('a'),('b'),('c');
- 再次查询
select last_insert_id();
- 查询后,并不是5, 而是3.
- 在批量插入之前,下一个值是3, 获取的是插入 name=a 记录时的id.
- 即如果插入多行记录时,只返回插入第一行时所返回的值。
5 . 修改时 不变。
update teacher set name='修改后的值' where id=1;
- 再查询
select last_insert_id();
6 . last_insert_id() 的值只与最近查询的那个表有关。
如果此时再有一个自动增长的 user 表,
往teacher表再添加一条记录,那么 last_insert_id() 变成了4.
这时,再往 user() 表插入一条数据,
那么这个时候,last_insert_id() 就与 user 表相关了,变成了1.