本人已参与「新人创作礼」活动,一起开启掘金创作之路。
持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第32天,点击查看活动详情
目录
今天阿文介绍的内容为:
- 条件判断函数
- 信息系统函数
条件判断函数与信息系统函数
条件判断函数
也称为控制流程函数,根据满足的不同条件,执行相应的流程。MySQL中进行条件判断的函数有IF、IFNULL和CASE。
系统信息函数
可以用来查询系统的信息,MySQL中的系统信息有数据库的版本号、当前用户名和连接数、系统字符集、最后一个自动生成的ID值等
1.IF(expr, v1, v2)函数
IF(expr, v1, v2)
:如果表达式expr是true即expr <> 0 and expr <> NULL,则返回值为v1;否则返回值为v2。
例子:
SELECT IF(1 < 2, "YES", "NO"), IF(STRCMP("test", "test1"), "NO", "YES");
查询结果为:
可以看到,1 < 2所以返回YES,而STRCMP比较两个字符串相等则返回0,不相等则返回一个非零值,"test"和"test1"不相等,返回一个非零值,所以返回NO。
2.IFNULL(v1, v2)函数
IFNULL(v1,v2)
:假如v1不为NULL,则IFNULL()的返回值为v1;否则其返回值为v2。
例子:
SELECT IFNULL(1, 2), IFNULL(NULL, 10), IFNULL(1/0, "WRONG");
查询结果:
因为IFNULL(1, 2)的第一个值不为空,所以返回1,IFNULL(NULL, 10)的第一个值为空,所以返回10,"1/0"的结果为空,所以IFNULL(1/0, "WRONG")返回字符串"WRONG"。
3.CASE函数
CASE expr WHEN V1 THEN R1 [WHEN V2 THEN R2]...[ELSE Rn+1]END: 如果expr值等于某个Vn, 则返回对应位于THEN后面的结果;如果所有WHEN后面的值都不相等,则返回ELESE后面的Rn+1
例子:
SELECT CASE 2 WHEN 1 THEN "ONE" WHEN 2 THEN "TWO" WHEN 3 THEN "THREE" ELSE "MORE" END;
查询结果:
可以看到,CASE后面的值为2,与第二条分支语句WHEN后面的值相等,因此返回结果为“TWO”。
CASE WHEN V1 THEN R1 [WHEN V2 THEN R2]… ELSE Rn+1] END:某个vn值为TRUE时,返回对应位置THEN后面的结果;如果所有值都不为TRUE,则返回ELSE后的Rn+1。
例子:
SELECT CASE WHEN 1 < 2 THEN "1 < 2" WHEN 2 < 3 THEN "2 < 3" ELSE "FALSE" END;
查询结果:
可以看到,虽然1 < 2 , 2 < 3都满足条件为TRUE,但是只是返回了第一个满足为TRUE的THEN后面的值。
4.获取MySQL版本号、连接数和数据库名函数
VERSION()
返回指示MySQL服务器版本的字符串。这个字符串使用utf8字符集。
例子:
SELECT VERSION();
查询结果:
CONNECTION_ID()
返回MySQL服务器当前连接的次数,每个连接都有各自唯一的ID。
例子:
SELECT CONNECTION_ID();
查询结果:
5.获取用户名的函数
USER(), CURRENT_USER(), CURRENT_USER, SYSTEM_USER()和SESSION_USER()这几个函数返回当前被MySQL服务器验证的用户名和主机名组合。这个值符合确定当前登录用户存取权限的MySQL账户。
例子:
SELECT USER(), CURRENT_USER(), SYSTEM_USER();
查询结果:
返回结果值指示了当前账户连接服务器时的用户名及所连接的客户主机,root为当前登录的用户名,localhost为登录的主机名。
6.获取字符串的字符集和排序方式的函数
CHARSET(str)返回字符串str自变量的字符集。
例子:
SELECT CHARSET('abc'), CHARSET(CONVERT('abc' USING latin1)), CHARSET(VERSION());
查询结果:
CHARSET('abc')返回系统默认的字符集utf8;CHARSET(CONVERT('abc' USING latin1))返回的字符集为latin1;前面介绍过,VERSION()返回的字符串使用utf8字符集,因此CHARSET返回结果为utf8。
COLLATION(str)
返回字符串str的字符排列方式。
例子:
SELECT COLLATION("abc"), COLLATION(CONVERT('abc' USING utf8));
查询结果:
7.获取最后一个自动生成的ID值的函数
LAST_INSERT_ID()
函数返回最后生成的AUTO_INCREMENT值。
一次插入一条记录
分别单独向表employee中插入两条记录:
INSERT INTO worker VALUES (NULL, "赵飞");
INSERT INTO worker VALUES (NULL, "王格");
查询结果:
使用LAST_INSERT_ID()查看最后自动生成的Id值:
SELECT LAST_INSERT_ID();
查询结果:
可以看到,一次插入一条记录时,返回值为最后一条插入记录的Id值为2。
一次同时插入多条记录
INSERT INTO worker VALUES (NULL, "张三"), (NULL, "李四"), (NULL, "王五");
查询结果:
可以看到最后一条记录的Id字段值为5,使用LAST_INSERT_ID()查看最后自动生成的Id值:
SELECT LAST_INSERT_ID();
查询结果:
结果显示,LAST_INSERT_ID值不是5而是3,这是为什么呢?在向数据表中插入一条新记录时,LAST_INSERT_ID()返回带有AUTO_INCREMENT约束的字段最新生成的值2;继续向表中同时添加3条记录,读者可能以为这时LAST_INSERT_ID值为5,可显示结果却为3,这是因为当使用一条INSERT语句插入多行时,LAST_INSERT_ID()只返回插入的第一行数据时产生的值,在这里为第3条记录。之所以这样,是因为这使依靠其他服务器复制同样的INSERT语句变得简单。
提示: LAST_INSERT_ID是与数据表无关的,如果向表a插入数据后再向表b插入数据,那么LAST_INSERT_ID返回表b中的Id值。
总结
- MySQL提供了许多条件判断函数,在进行数据的插入时对数据进行数据是否符合插入的条件
- 系统信息函数提供了本机的MySQL的一些信息
好了,今天阿文就介绍到这了...
byebye...