首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

MySQL数据库应用总结—MySQL数据库函数的操作(4):条件判断函数和系统信息函数

SQL语法预览:

使用函数:【select函数名(参数1,参数2…);】

详解:

条件判断函数

条件判断函数也称为控制流程函数,根据满足条件不同,执行相应的流程。MySQL中进行条件判断的函数有IF、IFNULL和CASE。

1

IF(expr,v1,v2)函数

如果表达式expr是TURE(expr0 and exprNULL),则IF()函数的返回值为v1;否则返回值为v2。IF()的返回值是数字值还是字符串值,视其所在语境而定。

案例

使用IF()函数进行条件判断,使用的SQL语句如下:

命令语句

select IF(1>2,1,2),IF(1

执行结果:

2

IFNULL(v1,v2)函数

假如v1不为NULL,则IFNULL()函数的返回值为v1;否则返回值为v2。IFNULL()的返回值是数字值还是字符串值,视其所在语境而定。

案例

使用IFNULL()函数进行条件判断,SQL语句如下:

命令语句

select IFNULL(1,2),IFNULL(NULL,10),IFNULL(1/0,'wrong');

执行结果:

3

CASE函数

CASE expr WHEN v1 THEN r1[WHEN v2 THEN r2][ELSE rn]END函数表示,如果expr想值等于某个vn,则返回对应位置THEN后面的结果。如果与所有值都不相等,则返回ELSE后面的rn

案例

使用CASE WHEN语句执行分支操作,SQL语句如下:

命令语句

select CASE 2 WHEN 1 THEN 'one' WHEN 2 THEN 'two' ELSE 'more' END;

执行结果:

期的函数和返回UTC时间的函数

案例

使用CASE WHEN语句执行分支操作,SQL语句如下:

命令语句

select CASE WHEN 1>2 THEN 'true' ELSE 'false' END;

执行结果:

系统信息函数

MySQL中系统信息有数据库的版本号、当前用户名和连接数、系统字符集、最后一个自动生成的ID值等。

1

获取MySQL版本号、连接数和数据库名的函数

1)VERSION()函数

VERSION()函数返回表示MySQL服务器版本的字符串。这个字符串使用UTF-8字符集。

案例

查看当前MySQL版本号,SQL语句如下:

命令语句

select VERSION();

结果如下:

2)CONNECTION_ID()函数

CONNECTION_ID()函数返回mysql服务器当前连接次数,每个连接都有各自唯一的ID。

案例

查看当前用户连接数,SQL语句如下:

命令语句

select CONNECTION_ID();

结果如下:

另外通过 SHOW PROCESSLIST和 SHOW FULL PROCESSLIST语句也可以查看连接信息。

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

如果roo账号,能看到所有用户的当前连接。如果是其他普通帐号,则只能看到自己占用的连接。 SHOW PROCESSLIST只列出前100条连接信息,如果想列出全部连接信息可使用SHOW FULL PROCESSLIST命令。

案例

使用 SHOW PROCESSLIST命令输出当前用户的连接信息,SQL语句如下:

命令语句

SHOW PROCESSLIST;

结果如下:

(1)Id列:用户MySQL时,系统分配的 connection id

(2)User列:显示当前用户,如果不是root,这个命令就只显示用户权限范围内的mysql语句

(3)Host列:显示这个语句是从哪个ip的哪个端口上发出的,可以用来追踪出现问题语句的用户

(4)db列:显示这个进程目前连接的是哪个数据库

(5)Command列:显示当前连接执行的命令,一般取值为体眠(sleep)、查询(query)和连接接( Connect)

(6)Time列:显示这个状态持续的时间,单位是秒。

(7)State列:显示使用当前连接的SQL语句的状态,这是很重要的列,后续会有所有状态的描述,State只是语句执行中的某一个状态。一个SOL语句,以查询为例,可能需要经过Copying to tmp table(复制到临时表)、 Sorting result(排序结果)、 Sending data(发送数据)等状态才可以完成

(8)info列:显示这个SOL语句,是判断问题语句的一个重要依据。

3)DATABASE()和 SCHEMA()函数

DATABASE()和 SCHEMA()函数返回使用utf8字符集的默认(当前)数据库名。

案例

查看当前使用的数据库,SQL语句如下:

命令语句

select DATABASE(),SCHEMA();

结果如下:

可以看到,使用哪个数据库才显示那个,不然就是NULL。

2

获取用户名的函数

USER()、CURRENT_USER、CURRENT_USER()、SYSTEM_USER()和SESSION_USER()这几个函数返回当前被 MySQL服务器验证的用户名和主机名的组合。一般情况下,这几个函数的运回值是相同的。

案例

获取当前登录用户名,SQL语句如下:

命令语句

select USER(),CURRENT_USER(),SYSTEM_USER();

执行结果:

3

获取字符串的字符集和排序方式的函数

1)CHARSET()函数

CHARSET(str)函数表示返回字符串str自变量的字符集。

案例

使用CHARSET()函数返回字符串使用的字符集,SQL语句如下:

命令语句

select CHARSET('abc'),CHARSET(VERSION());

结果如下:

2)COLLATION()函数

COLLATION()函数返回字符串str的字符排到方式。

案例

使用COLLATION()函数返回字符串的排到方式,SQL语句如下:

命令语句

select COLLATION('abc'),COLLATION(CONVERT('abc' USING utf8));

结果如下:

可以看到,使用不同的字符集时,字符串的排列方式也不同。

4

获取最后一个自动生成ID值的函数

LAST_INSERT_ID()函数自动返回最后一个INSERI或UPDATE为AUTO_INCREMENT列设置的第一个发生的值。

案例

使用 SELECT LAST_INSERT_ID查看最后一个自动生成的列值,SQL语法如下:

1)一次插入一条记录

首先创建表 worker,其Id字段带有 AUTO_INCREMENT约束,输入的语句及其执行结果如下:

命令语句

create table worker (Id int AUTO_INCREMENT NOT NULL primary key,Name varchar(30));

insert into worker values(null,'jimy');

insert into worker values(null,'tom');

select * from worker;

select LAST_INSERT_ID();

结果如下:

分次向表 worker中插入2条记录,查看插入的数据可以发现,最后一次插入的记录的ld字段借为2。

2)一次同时插入多条记录

向表中插入多条记录,输入的语句及其执行结果如下:

命令语句

insert into worker values(null,'Kevin'),(null,'michal'),(null,'nick');

select * from worker;

select LAST_INSERT_ID();

结果如下:

结果显示LAST_INSERT_ID的值不是5而是3,这是为什么呢,在向数据表中插入一条心记录时,LAST_INSERT_I()返回带有AUTO_INCREMENT约束的字段最新生成值2;继续向表中添加3条记录,注意当使用INSERT语句插入多条记录时,LAST_INSERT_ID()只返回插入第一行数据时产生的值,在这里为第三条数据,意味着不是看记录个数而是看insert语句。之所以这样是因为这样会使依靠其他服务器复制同样的INSERT语句变得简单。

注意:LAST_INSERT_ID与table无关,如果向表a插入数据后,再向表b插入数据,LAST_INSERT_ID返回b中的ID值。

SQL语法总结:

使用函数:【select函数名(参数1,参数2…);】

end

欢迎关注互动|未来科技008

微信ID:seali_521

欢迎关注互动|十年之前diary

微信ID:Lseali_521

十年之前diary

文学随笔,生活点滴

广读胸中有本,勤写笔下生辉

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180830G0I9GU00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券