11|第十一话:基础篇-MySQL之运算符和常用函数

MySQL支持多种类型的运算符和内置函数,可极大提高使用者操作效率,以高效满足大多数实际工程中涉及到的操作场景,本篇文章让我们来一探究竟。本篇文章脉络如下:

11|第十一话:基础篇-MySQL之运算符和常用函数

11|第十一话:基础篇-MySQL之运算符和常用函数

一、运算符

MySQL中支持多种类型的运算符,主要包括算术运算符、比较运算符、逻辑运算符和位运算符

🧷1.1、算术运算符

算术运算符主要是加减乘除操作,MySQL支持如下常见算术操作:

操作符 示例 描述
+ a + b 加法
a – b 减法
* a * b 乘法
/ a / b 除法
DIV a DIV b 除法,取商的整数部分
% a % b 取余
其中注意DIV和/区别,比如表达式 2 DIV 3的结果是0,而2 / 3的结果是0.6667。此外,在除法运算和取模运算中,如果除数是0,结果返回NULL,如下例所示:
mysql> select 1/0;
+------+
1/0  |
+------+
| NULL |
+------+
1 row in set, 1 warning (0.00 sec)

mysql> select 1%0;
+------+
1%0  |
+------+
| NULL |
+------+
1 row in set, 1 warning (0.01 sec)

mysql> select 1 DIV 0;
+---------+
1 DIV 0 |
+---------+
|    NULL |
+---------+
1 row in set, 1 warning (0.01 sec)

🧷1.2、比较运算符

在《09|第九话:基础篇-MySQL之初级查询》中已经学习过,我们汇总如下:

操作符 示例 描述
= a = b a等于b
<>或者!= a <> b a不等于b
< a < b a小于b
<= a <= b a小于或等于b
> a > b a大于b
>= a >= b a大于或等于b
BETWEEN a BETWEEN b AND c 满足 b <= a <= c
NOT BETWEEN a NOT BETWEEN b AND c 不满足 b <= a <= c
in a IN (b1, b2, …) a是b1, b2, … 中的某一个
NOT IN a NOT IN (b1, b2, …) a不是b1, b2, … 中的任意一个
IS NULL a IS NULL a的值是NULL
IS NOT NULL a IS NOT NULL a的值不是NULL
LIKE a LIKE b a匹配b
NOT LIKE a NOT LIKE b a不匹配b

由比较操作符连接而成的表达式也称为布尔表达式,表示真或者假,也可以称为TRUE或者FALSE。比如1 > 3就代表FALSE,3 != 2就代表TRUE,由于已经逐个学习过,故不展开赘述。

🧷1.3、逻辑运算符

逻辑运算符又称为布尔运算符,逻辑操作符是用来将多个布尔表达式连接起来,我们主要需要了解如下几种即可:

操作符 示例 描述
AND a AND b 只有a和b同时为真,表达式才为真
OR a OR b 只要a或b有任意一个为真,表达式就为真
XOR a XOR b a和b有且只有一个为真,表达式为真

这些也在第九话中举例说明过用法,不再赘述。

🧷1.4、位运算符

实际工程中,以上三种使用比较广泛,而位运算符很少使用,我们只需要大概了解即可。

位运算是将给定的操作数转化为二进制后,对操作数的每一位进行指定的逻辑运算,得到二进制结果后转换为十进制数的结果,我们了解如下几种:

操作符 示例 描述
& a&b 位与(即按位AND)
a|b 位或(即按位OR)
^ a^b 位异或(即按位XOR)
~ a~b 位取反
>> a>>b 位右移b位
<< a<<b 位左移b位

我们通过几个简单的例子了解下。

“位与”,是对多个操作数的二进制位做逻辑与操作,比如2&3,由于2的二进制数是10,3的二进制数是11,10&11的结果是10,对应十进制还是2:

mysql> select 2&3;
+-----+
2&3 |
+-----+
|   2 |
+-----+
1 row in set (0.01 sec)

注意,这里可以是多个操作数,原理是一样的,故不赘述。

“位或”即二进制位做逻辑或操作,比如2|3对应10|11的二进制结果是11,对应十进制数即3:

mysql> select 2|3;
+-----+
2|3 |
+-----+
|   3 |
+-----+
1 row in set (0.00 sec)

“位异或”是对二进制位做逻辑异或操作,10^11异或的结果是01,对应十进制是1:

mysql> select 2^3;
+-----+
2^3 |
+-----+
|   1 |
+-----+
1 row in set (0.00 sec)

“位取反”,顾名思义就是对二进制数每一位做取反操作,即0变成1、1变成0.我们对1进行取反:

mysql> select ~1;
+----------------------+
| ~1                   |
+----------------------+
18446744073709551614 |
+----------------------+
1 row in set (0.00 sec)

对1取反后竟然是如此惊人的数字,我们来看下这个数字对应的二进制是多少:

mysql> select bin(18446744073709551614);
+------------------------------------------------------------------+
| bin(18446744073709551614)                                        |
+------------------------------------------------------------------+
1111111111111111111111111111111111111111111111111111111111111110 |
+------------------------------------------------------------------+
1 row in set (0.00 sec)

数了数,这里有63个1,所以一共是64位,即8个字节,可以推断出在MySQL中一个常量数字默认占用8个字节。

依据可以翻阅官方文档:https://dev.mysql.com/doc/refman/5.7/en/bit-functions.html

11|第十一话:基础篇-MySQL之运算符和常用函数

提到了,以上的位操作符的结果(包括位与、位或等操作)都是无符号64位整数:The result is an unsigned 64-bit integer.

最后说下“位右移”和“位左移”,我们以位右移为例,比如100>>3,表示100的二进制0001100100,对于右移三位,左边补0,变成0000001100,对应的十进制数是12:

mysql> select 100>>3;
+--------+
100>>3 |
+--------+
|     12 |
+--------+
1 row in set (0.00 sec)

“位左移”同理,向左移动N位,并且右边补0即可。

11|第十一话:基础篇-MySQL之运算符和常用函数

二、函数

写代码的朋友一定知道函数的重要性,丰富的函数可以大大提高工作效率,函数可以帮助做很多事情,比如字符串的处理、数值的运算、日期的运算等等,MySQL提供了很多内建函数帮助开发人员编写简单快捷的SQL语句,比如:

  • UPPER函数是用来把给定的文本中的小写字母转换成大写字母。

  • NOW函数用来获取当前的日期和时间。

  • ……

如果我们想使用这些函数,可以在函数名后加一个小括号()就好,表示调用一下这个函数,简称函数调用。比方说NOW()就代表调用NOW函数来获取当前日期和时间。针对某些包含参数的函数,我们也可以在小括号()里将参数填入,比方说UPPER(‘abc’)表示将字符串’abc’转换为大写格式,下面我们逐一看一看。

🧷2.1、字符串函数

字符串函数是最常用的一种函数,比较常用的有:

名称 调用示例 示例结果 描述
LEFT LEFT(‘abc123’, 3) abc 给定字符串从左边取指定长度的子串
RIGHT RIGHT(‘abc123’, 3) 123 给定字符串从右边取指定长度的子串
LENGTH LENGTH(‘abc’) 3 给定字符串的长度
LOWER LOWER(‘ABC’) abc 给定字符串的小写格式
UPPER UPPER(‘abc’) ABC 给定字符串的大写格式
LTRIM LTRIM(‘ abc’) abc 给定字符串左边空格去除后的格式
RTRIM RTRIM(‘abc ‘) abc 给定字符串右边空格去除后的格式
SUBSTRING SUBSTRING(‘abc123’, 2, 3) bc1 SUBSTRING(str,x,y):返回从字符串str的x位置起y个字符长度的字串
CONCAT CONCAT(‘abc’, ‘123’, ‘xyz’) abc123xyz 将给定的各个字符串拼接成一个新字符串

当然了,还有很多其他的内置函数,当我们需要使用的时候,不妨去官网看看哪些函数可以为我们所用(https://dev.mysql.com/doc/refman/5.7/en/built-in-function-reference.html)。

重要的一点是我们要学会在SQL中使用这些函数,我们来以CONCAT函数为例来看一下。

这里有一张简单的学生信息表,只有两个字段,数据如下:

mysql> select * from student_info;
+----+---------+
| id | name    |
+----+---------+
|  1 | fossi   |
|  2 | fossi   |
|  3 | fossi   |
+----+---------+
3 rows in set (0.00 sec)

假设希望select的结果是一句话:学号是XX的学生名字叫XXX,我们就可以使用CONCAT函数拼接成新的字符串输出:

mysql> select concat("学号是",id,"的学生名字叫",name) as '学生信息' 
from stude t_info
;
+-------------------------------------+
| 学生信息                            |
+-------------------------------------+
| 学号是1的学生名字叫fossi            |
| 学号是2的学生名字叫fossi            |
| 学号是3的学生名字叫fossi            |
+-------------------------------------+
3 rows in set (0.01 sec)

容易想到,如果没有concat函数,实现这么一个简单的功能还是很麻烦的。

由于函数功能的使用对程序员来说是一项基本使用技能,工作中无时无刻不在调用函数来实现各种功能,因此本文只是作为一个引子,就不对函数展开做一个一个详细说明了,相信只要试一下就可以掌握函数的使用了。

🧷2.2、数值函数

MySQL中另外一类很重要的函数就是数值函数,可以用来进行数值运算,比如取绝对值等功能,常用的数值函数有:

名称 调用示例 示例结果 描述
ABS ABS(-1) 1 取绝对值
Pi PI() 3.141593 返回圆周率
COS COS(PI()) -1 返回一个角度的余弦
SIN SIN(PI()/2) 1 返回一个角度的正弦
TAN TAN(0) 0 返回一个角度的正切
EXP EXP(1) 2.718281828459045 返回e的指定次方
MOD MOD(5,2) 1 返回除法的余数
RAND RAND() 0.7537623539136372 返回一个随机数
SQRT SQRT(9) 3 返回一个数的平方根

🧷2.3、日期和时间函数

有的时候我们需要处理这样的需求:当前时间是多少?下个月的今天是星期几?统计截止到当前日期前三天的数据。此时就需要用上日期和时间函数,这也是实际工程中使用十分多的函数,比较常见的函数有:

名称 调用示例 示例结果 描述
NOW NOW() 2022-09-17 21:16:41 返回当前日期和时间
CURDATE CURDATE() 2022-09-17 返回当前日期
CURTIME CURTIME() 21:16:41 返回当前时间
DATE DATE(‘2022-09-17 21:16:41’) 2022-09-17 将给定日期和时间值的日期提取出来
DATE_ADD DATE_ADD(‘2022-09-17 21:16:41’, INTERVAL 2 DAY) 2022-09-19 21:16:41 将给定的日期和时间值添加指定的时间间隔
DATE_SUB DATE_SUB(‘2022-09-17 21:16:41’, INTERVAL 2 DAY) 2022-09-15 21:16:41 将给定的日期和时间值减去指定的时间间隔
DATEDIFF DATEDIFF(‘2022-09-17’, ‘2022-09-18’); -1 返回两个日期之间的天数(负数代表前一个参数代表的日期比较小)
DATE_FORMAT DATE_FORMAT(NOW(),’%m-%d-%Y’) 09-17-2022 用给定的格式显示日期和时间

在使用DATE_ADD和DATE_SUB这两个函数时需要注意,增加或减去的时间间隔单位可以自己定义,下边是MySQL支持的一些时间单位:

  • MICROSECOND:毫秒

  • SECOND:秒

  • MINUTE:分钟

  • HOUR:小时

  • DAY:天

  • WEEK:星期

  • MONTH:月

  • QUARTER:季度

  • YEAR:年

如果我们相让2022-09-17 21:00:00这个时间值增加5分钟,可以这么写:

mysql> SELECT DATE_ADD('2022-09-17 21:00:00', INTERVAL 5 MINUTE);
+----------------------------------------------------+
| DATE_ADD('2022-09-17 21:00:00', INTERVAL 5 MINUTE) |
+----------------------------------------------------+
2022-09-17 21:05:00                                |
+----------------------------------------------------+
1 row in set (0.00 sec)

🧷2.4、聚集函数

有些函数是用来统计数据的,比方说统计一下表中的行数,某一列数据的最大值是什么,我们把这种函数称之为聚集函数,下边介绍MySQL中常用的几种聚集函数:

函数名 描述
COUNT 返回某列的行数
MAX 返回某列的最大值
MIN 返回某列的最小值
SUM 返回某列值之和
AVG 返回某列的平均值

鉴于这几个聚集函数十分重要,我们逐一说明。

第一个是COUNT函数,COUNT函数使用来统计行数的,它有下边两种使用方式:

  • COUNT(*):对表中行的数目进行计数,不管列的值是不是NULL。

  • COUNT(列名):对特定的列进行计数,会忽略掉该列为NULL的行。

当然了还有COUNT(1),这个跟COUNT(*)差不多,关于这几个COUNT查询细节,我们以后学习完索引之后再来研究,这里我们直接说结论,一般情况下我们推荐使用COUNT(*)COUNT(*)是SQL92定义的标准统计行数的语法,并且效率高,所以请直接使用COUNT(*)查询表的行数!

查询下学生信息表的行数:

mysql> select count(*) from student_info;
+----------+
| count(*) |
+----------+
|        3 |
+----------+
1 row in set (0.00 sec)

第二个是MAX函数和MIN函数,MAX函数是用来查询某列中数据的最大值,比如查询学号ID最大的学生信息:

mysql> select max(id) from student_info;
+---------+
| max(id) |
+---------+
|       3 |
+---------+
1 row in set (0.00 sec)

相对地,MIN就是找到最小的那个,这里就不赘述了。

第三个是SUM函数和AVG函数,SUM函数是用来计算某列数据的和,比如计算所有学生ID的和:

mysql> select sum(id) from student_info;
+---------+
| sum(id) |
+---------+
|       6 |
+---------+
1 row in set (0.01 sec)

AVG函数是用来计算某列数据的平均数,比如计算所有学生ID的平均数:

mysql> select avg(id) from student_info;
+---------+
| avg(id) |
+---------+
|  2.0000 |
+---------+
1 row in set (0.00 sec)

以上示例是针对所有数据的统计,其实也可以在后面组合where语句进行范围的限定,只有符合where条件的数据才会纳入到计算范围。

我们的学生信息表目前数据是这样的:

mysql> select * from student_info;
+----+---------+
| id | name    |
+----+---------+
|  1 | fossi   |
|  2 | fossi   |
|  3 | fossi   |
+----+---------+
3 rows in set (0.00 sec)

假设我要按照姓名统计不重名的有多少(这里为了演示功能而强行设定的需求,请不要纠结),我们首先想到是这么写:

mysql> select count(name) from student_info;
+-------------+
| count(name) |
+-------------+
|           3 |
+-------------+
1 row in set (0.01 sec)

这里按照name计算学生数量,但是不符合“不重名”的需求,此时可以组合使用DISTINCT关键字:

mysql> select count(DISTINCT name) from student_info;
+----------------------+
| count(DISTINCT name) |
+----------------------+
|                    1 |
+----------------------+
1 row in set (0.00 sec)

可以看到,由于三个学生名字都叫fossi,因此就只统计出来一个。

🧷2.5、流程函数

流程函数也是很多场景中会使用到的一类函数,控制流程函数主要是做一些数据的条件判断,按照需求把字段输出指定的内容,用于数据的分类、特征提出等,以便后续有针对性的进行数据分析。主要包括IF、CASE-WHEN、IFNULL、NULLIF。

函数名 描述
IF(value,t,f) 如果value为真返回t,否则返回f
IFNULL(value1,value2) 如果value不为空返回value1,否则返回value2
CASE WHEN [value1] THEN[result1]…ELSE[default] END 如果value1是真则返回result1,否则返回default
CASE [expr] WHEN [value1] THEN[result1]…ELSE[default] END 如果expr等于value1则返回result1,否则返回default

先说说第一个IF函数,我们举个简单的例子就明白啦!针对我们的学生信息表,我们修改表结构为:

CREATE TABLE `student_info` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '学号',
  `name` varchar(20) CHARACTER SET utf8 DEFAULT NULL COMMENT '姓名',
  `score` int(11) DEFAULT NULL COMMENT '分数',
  PRIMARY KEY (`id`)
) ENGINE
=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COMMENT='学生基本信息表';

增加了一列考试分数字段,我们插入一些数据后展示如下:

mysql> select * from student_info;
+----+------+-------+
| id | name | score |
+----+------+-------+
|  1 | stu1 |   100 |
|  2 | stu2 |    85 |
|  3 | stu3 |    70 |
|  4 | stu4 |    50 |
+----+------+-------+
4 rows in set (0.00 sec)

需求:如果分数大于等于80,则给出“优秀”评价,否则给出“良好”评价,我们可以这样写:

mysql> SELECT id,name,score,IF(score>=80,"优秀","良好") as "成绩评价" FROM student_info;
+----+------+-------+--------------+
| id | name | score | 成绩评价     |
+----+------+-------+--------------+
|  1 | stu1 |   100 | 优秀         |
|  2 | stu2 |    85 | 优秀         |
|  3 | stu3 |    70 | 良好         |
|  4 | stu4 |    50 | 良好         |
+----+------+-------+--------------+
4 rows in set (0.01 sec)

是不是很简单?再来一个新的需求,将成绩评价分为优秀、良好和不及格:80分及以上的为优秀、60到80分之间的为良好、60分以下为不及格,此时我们可以通过IF的嵌套来实现:

mysql> SELECT id,name,score,IF(score>=80,"优秀",IF(score>=60,"良好","不及格")) as "成绩评价" FROM student_info;
+----+------+-------+--------------+
| id | name | score | 成绩评价     |
+----+------+-------+--------------+
|  1 | stu1 |   100 | 优秀         |
|  2 | stu2 |    85 | 优秀         |
|  3 | stu3 |    70 | 良好         |
|  4 | stu4 |    50 | 不及格       |
+----+------+-------+--------------+
4 rows in set (0.01 sec)

我们继续看IFNULL(value1,value2)函数,如果value不为空返回value1,否则返回value2,假设我们的学生信息数据变为:

mysql> select * from student_info;
+----+------+-------+
| id | name | score |
+----+------+-------+
|  1 | stu1 |   100 |
|  2 | stu2 |    85 |
|  3 | stu3 |    70 |
|  4 | stu4 |    50 |
|  5 | stu5 |  NULL |
+----+------+-------+
5 rows in set (0.01 sec)

可以看到stu5的成绩为NULL,我们针对这种情况在学生成绩这一列展示为:“此学生弃考,成绩作废!请家长!”

mysql> SELECT id,name,IFNULL(score,"此学生弃考,成绩作废!请家长!") as "成绩" FROM student_info;
+----+------+-----------------------------------------------+
| id | name | 成绩                                          |
+----+------+-----------------------------------------------+
|  1 | stu1 | 100                                           |
|  2 | stu2 | 85                                            |
|  3 | stu3 | 70                                            |
|  4 | stu4 | 50                                            |
|  5 | stu5 | 此学生弃考,成绩作废!请家长!                |
+----+------+-----------------------------------------------+
5 rows in set (0.00 sec)

一般我们可以判断,如果该字段为空的,将其置为有意义的数,比如这里的分数其实可以置为0分,方便进行数值运算。

最后我们来说说CASE-WHEN,如果多重判断的情况下,用IF就很麻烦,CASE WHEN语法就能很好地解决,而且实际中也是非常实用的语法。

我们用CASE-WHEN来解决下上面IF语法来实现的两个需求。

需求1:如果分数大于等于80,则给出“优秀”评价,否则给出“良好”评价,我们可以这样写:

mysql> select id,name,score,
case when score >=80 then "优秀" 
else "良好" end
 as "成绩评价" 
from student_info;
+----+------+-------+--------------+
| id | name | score | 成绩评价     |
+----+------+-------+--------------+
|  1 | stu1 |   100 | 优秀         |
|  2 | stu2 |    85 | 优秀         |
|  3 | stu3 |    70 | 良好         |
|  4 | stu4 |    50 | 良好         |
|  5 | stu5 |  NULL | 良好         |
+----+------+-------+--------------+
5 rows in set (0.01 sec)

需求2:将成绩评价分为优秀、良好和不及格:80分及以上的为优秀、60到80分之间的为良好、60分以下为不及格,我们可以这么写:

mysql> select id,name,score,
case when score >=80 then "优秀" 
when score >=60 then "良好" 
else "不及格" end
 as "成绩评价" 
from student_info;
+----+------+-------+--------------+
| id | name | score | 成绩评价     |
+----+------+-------+--------------+
|  1 | stu1 |   100 | 优秀         |
|  2 | stu2 |    85 | 优秀         |
|  3 | stu3 |    70 | 良好         |
|  4 | stu4 |    50 | 不及格       |
|  5 | stu5 |  NULL | 不及格       |
+----+------+-------+--------------+
5 rows in set (0.00 sec)

最后一种CASE [expr]的语法,可以使用在[expr]有固定几种类型的情况,因为它的判定规则是:如果expr等于value1则返回result1,否则返回default,限于篇幅,这里就不举例展开说明了。

函数就说到这里,其实MySQL还有很多很多内建函数,只是用到比较少,我们也不必太去关心这些函数。

11|第十一话:基础篇-MySQL之运算符和常用函数

三、隐式类型转换

介绍完了运算符和函数两大块内容后,我们最后来看下MySQL隐式类型转换问题。

只要某个值的类型与上下文要求的类型不符,MySQL就会根据上下文环境中需要的类型对该值进行类型转换,由于这些类型转换都是MySQL自动完成的,所以也可以被称为隐式类型转换。我们列举几种常见的隐式类型转换的场景:

第一种:把操作数类型转换为适合操作符计算的相应类型。

比方说对于加法操作符+来说,它要求两个操作数都必须是数字才能进行计算,所以如果某个操作数不是数字的话,会将其隐式转换为数字,比方说下边这几个例子:

mysql> SELECT 1 + 2'1' + 2'1' + '2';
+-------+---------+-----------+
1 + 2 | '1' + 2 | '1' + '2' |
+-------+---------+-----------+
|     3 |       3 |         3 |
+-------+---------+-----------+
1 row in set (0.00 sec)

第二种:将函数参数转换为该函数期望的类型。

以用于拼接字符串的CONCAT函数举例,这个函数以字符串类型的值作为参数,如果我们在调用这个函数的时候,传入了别的类型的值作为参数,MySQL会自动把这些值的类型转换为字符串类型的:

mysql> SELECT CONCAT('1''2')CONCAT('1'2)CONCAT(12);
+------------------+----------------+--------------+
| CONCAT('1''2') | CONCAT('1'2) | CONCAT(12) |
+------------------+----------------+--------------+
12               | 12             | 12           |
+------------------+----------------+--------------+
1 row in set (0.00 sec)

第三种:存储数据时,把某个值转换为某个列需要的类型。

比如有这么一张表:

CREATE TABLE t (
    i1 TINYINT,
    i2 TINYINT,
    s VARCHAR(100)

)
;

这个表有三个列,列i1和i2是用来存储整数的,列s是用来存储字符串的,如果我们在存储数据的时候填入的不是期望的类型,就像这样:

mysql> INSERT INTO t(i1, i2, s) VALUES('100''100'200);
Query OK, 1 row affected (0.01 sec)

mysql> SELECT * FROM t
;
+------+------+------+
| i1   | i2   | s    |
+------+------+------+
|  100 |  100 | 200  |
+------+------+------+
1 row in set (0.00 sec)

可以看到,仍然可以自动插入成功,在插入数据的时候字符串’100’会被转型为整数100,整数200会被转型成字符串’200’。

另外,在读取数据的时候,MySQL会尽量把值转换为表达式中需要的类型,而不是产生错误。比如下面这种奇葩场景仍然不会报错

mysql> SELECT '23sfd' + 0'sfd' + 0;
+-------------+-----------+
'23sfd' + 0 | 'sfd' + 0 |
+-------------+-----------+
|          23 |         0 |
+-------------+-----------+
1 row in set, 2 warnings (0.00 sec)

当然了,这个规则不能适用于存储数据。

此外,MySQL在运算时会自动提升操作数的类型,比如下面这张表:

mysql> SELECT * FROM t;
+------+------+------+
| i1   | i2   | s    |
+------+------+------+
|  100 |  100 | 200  |
+------+------+------+
1 row in set (0.00 sec)

其中的i1列和i2列的类型都是TINYINT,而TINYINT能表示的最大正整数是127,如果我们把i1列的值和i2列的值相加会发生什么呢?请看:

mysql> SELECT i1 + i2 FROM t;
+---------+
| i1 + i2 |
+---------+
|     200 |
+---------+
1 row in set (0.00 sec)

可以看到最后的结果是200,可是它已经超过TINYINT类型的表示范围了。其实在运算的过程中,MySQL自动将整数类型的操作数提升到了BIGINT,这样就不会产生运算结果太大超过TINYINT能表示的数值范围的尴尬情况了。类似的,有浮点数的运算过程会把操作数自动转型为DOUBLE类型。

11|第十一话:基础篇-MySQL之运算符和常用函数

四、总结

本篇文章细致地说明了三大块内容:运算符、函数和隐式类型转换问题,我们提取了其中比较常用的知识点,希望读者朋友能有所收获。

原文始发于微信公众号(幕后哈土奇):11|第十一话:基础篇-MySQL之运算符和常用函数

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/112839.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!