138 张图带你 MySQL 入门(6)

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 138 张图带你 MySQL 入门(6)

DATETIME


DATETIME 类型,包含日期和时间部分,可以使用引用字符串或者数字,年份可以是 4 位也可以是 2 位。


下面是 DATETIME 的示例


create table test6 (id datetime);
insert into test6 values ('2020-06-13 11:11:11'),(20200613111111),('20200613111111'),(20200613080808);


image.png


TIMESTAMP


TIMESTAMP 类型和 DATETIME 类型的格式相同,存储 4 个字节(比DATETIME少),取值范围比 DATETIME 小。


下面来说一下各个时间类型的使用场景


  • 一般表示年月日,通常用 DATE 类型;


  • 用来表示时分秒,通常用 TIME 表示;


  • 年月日时分秒 ,通常用 DATETIME 来表示;


  • 如果需要插入的是当前时间,通常使用 TIMESTAMP 来表示,TIMESTAMP 值返回后显示为 YYYY-MM-DD HH:MM:SS 格式的字符串,


  • 如果只表示年份、则应该使用 YEAR,它比 DATE 类型需要更小的空间。


每种日期类型都有一个范围,如果超出这个范围,在默认的 SQLMode 下,系统会提示错误,并进行零值存储。


下面来解释一下 SQLMode 是什么


MySQL 中有一个环境变量是 sql_mode ,sql_mode 支持了 MySQL 的语法、数据校验,我们可以通过下面这种方式来查看当前数据库使用的 sql_mode


select @@sql_mode;


一共有下面这几种模式


image.png


来源于 https://www.cnblogs.com/Zender/p/8270833.html


字符串类型


MySQL 提供了很多种字符串类型,下面是字符串类型的汇总


image.png


下面我们对这些数据类型做一个详细的介绍


CHAR 和 VARCHAR 类型


CHAR 和 VARCHAR 类型很相似,导致很多同学都会忽略他们之间的差别,首先他俩都是用来保存字符串的数据类型,他俩的主要区别在于存储方式不同。CHAR 类型的长度就是你定义多少显示多少。占用 M 字节,比如你声明一个 CHAR(20) 的字符串类型,那么每个字符串占用 20 字节,M 的取值范围时 0 - 255。VARCHAR 是可变长的字符串,范围是 0 - 65535,在字符串检索的时候,CHAR 会去掉尾部的空格,而 VARCHAR 会保留这些空格。下面是演示例子


create table vctest1 (vc varchar(6),ch char(6));

insert into vctest1 values("abc ","abc ");
select length(vc),length(ch) from vctest1;


结果如下


image.png


可以看到 vc 的字符串类型是 varchar ,长度是 5,ch 的字符串类型是 char,长度是 3。可以得出结论,varchar 会保留最后的空格,char 会去掉最后的空格。


BINARY 和 VARBINARY 类型


BINARY 和 VARBINARY 与 CHAR 和 VARCHAR 非常类似,不同的是它们包含二进制字符串而不包含非二进制字符串。BINARY 与 VARBINARY 的最大长度和 CHAR 与 VARCHAR 是一样的,只不过他们是定义字节长度,而 CHAR 和 VARCHAR 对应的是字符长度。


BLOB 类型


BLOB 是一个二进制大对象,可以容纳可变数量的数据。有 4 种 BLOB 类型:


TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB。它们区别在于可容纳存储范围不同。


TEXT 类型


有 4 种 TEXT 类型:TINYTEXT、TEXT、MEDIUMTEXT 和 LONGTEXT。对应的这 4 种 BLOB 类型,可存储的最大长度不同,可根据实际情况选择。


ENUM 类型


ENUM 我们在 Java 中经常会用到,它表示的是枚举类型。它的范围需要在创建表时显示指定,对 1 - 255 的枚举需要 1 个字节存储;对于 255 - 65535 的枚举需要 2 个字节存储。ENUM 会忽略大小写,在存储时都会转换为大写。


SET 类型


SET 类型和 ENUM 类型有两处不同


  • 存储方式


SET 对于每 0 - 8 个成员,分别占用 1 个字节,最大到 64 ,占用 8 个字节


  • Set 和 ENUM 除了存储之外,最主要的区别在于 Set 类型一次可以选取多个成员,而 ENUM 则只能选一个。


MySQL 运算符


MySQL 中有多种运算符,下面对 MySQL 运算符进行分类


  • 算术运算符
  • 比较运算符
  • 逻辑运算符
  • 位运算符


下面那我们对各个运算符进行介绍



算术运算符


MySQL 支持的算术运算符包括加、减、乘、除和取余,这类运算符的使用频率比较高

下面是运算符的分类


运算符 作用
+ 加法
- 减法
乘法
/, DIV 除法,返回商
%, MOD 除法,返回余数


下面简单描述了这些运算符的使用方法


image.png


  • + 用于获得一个或多个值的和
  • - 用于从一个值减去另一个值
  • 用于两数相乘,得到两个或多个值的乘积
  • / 用一个值除以另一个值得到商
  • % 用于一个值除以另一个值得到余数


在除法和取余需要注意一点,如果除数是 0 ,将是非法除数,返回结果为 NULL。


比较运算符


熟悉了运算符,下面来聊一聊比较运算符,使用 SELECT 语句进行查询时,MySQL 允许用户对表达式的两侧的操作数进行比较,比较结果为真,返回 1, 比较结果为假,返回 0 ,比较结果不确定返回 NULL。下面是所有的比较运算符


运算符 描述
= 等于
<> 或者是 != 不等于
<=> NULL 安全的等于,也就是 NULL-safe
< 小于
<= 小于等于
> 大于
>= 大于等于
BETWEEN 在指定范围内
IS NULL 是否为 NULL
IS NOT NULL 是否为 NULL
IN 存在于指定集合
LIKE 通配符匹配
REGEXP 或 RLIKE 正则表达式匹配


比较运算符可以用来比较数字、字符串或者表达式。数字作为浮点数进行比较,字符串以不区分大小写的方式进行比较。


  • = 号运算符,用于比较运算符两侧的操作数是否相等,如果相等则返回 1, 如果不相等则返回 0 ,下面是具体的示例,NULL 不能用于比较,会直接返回 NULL


image.png


  • <=> NULL-safe 的等于运算符,与 = 号最大的区别在于可以比较 NULL 值



image.png


  • 和上面同理,只不过是满足 <= 的时候返回 1 ,否则 > 返回 0。这里我有个疑问,为什么


select 'a' <= 'b';  / 返回 1 /
//
select 'a' >= 'b'; / 返回 0 呢/


  • 关于 >>= 是同理


  • BETWEEN 运算符的使用格式是 「a BETWEEN min AND max」 ,当 a 大于等于 min 并且小于等于 max 时,返回 1,否则返回 0 。操作数类型不同的时候,会转换成相同的数据类型再进行处理。比如


image.png

image.png

image.png


后面会详细介绍 regexp 的用法。


逻辑运算符


逻辑运算符指的就是布尔运算符,布尔运算符指返回真和假。MySQL 支持四种逻辑运算符


运算符 作用
NOT 或 ! 逻辑非
AND 或者是 && 逻辑与
OR 或者是 || 逻辑或
XOR 逻辑异或


下面分别来介绍一下


  • NOT 或者是 ! 表示的是逻辑非,当操作数为 0(假) ,则返回值为 1,否则值为 0。但是有一点除外,那就是 NOT NULL 的返回值为 NULL


image.png

image.png


位运算符


一听说位运算,就知道是和二进制有关的运算符了,位运算就是将给定的操作数转换为二进制后,对各个操作数的每一位都进行指定的逻辑运算,得到的二进制结果转换为十进制后就说是位运算的结果,下面是所有的位运算。


运算符 作用
& 位与
| 位或
^ 位异或
位取反
>> 位右移
<< 位左移


下面分别来演示一下这些例子



  • 位与 指的就是按位与,把 & 双方转换为二进制再进行 & 操作


image.png


位或是一个数值增大的操作


  • 位异或 指的就是对操作数的二进制位做异或操作


image.png


为什么会有这种现象,因为在 MySQL 中,常量数字默认会以 8 个字节来显示,8 个字节就是 64 位,常量 1 的二进制表示 63 个 0,加 1 个 1 , 位取反后就是 63 个 1 加一个 0 , 转换为二进制后就是 18446744073709551614,我们可以使用 「select bin()」 查看一下


image.png


image.png


MySQL 常用函数


下面我们来了解一下 MySQL 函数,MySQL 函数也是我们日常开发过程中经常使用的,选用合适的函数能够提高我们的开发效率,下面我们就来一起认识一下这些函数


字符串函数


字符串函数是最常用的一种函数了,MySQL 也是支持很多种字符串函数,下面是 MySQL 支持的字符串函数表


函数 功能
LOWER 将字符串所有字符变为小写
UPPER 将字符串所有字符变为大写
CONCAT 进行字符串拼接
LEFT 返回字符串最左边的字符
RIGHT 返回字符串最右边的字符
INSERT 字符串替换
LTRIM 去掉字符串左边的空格
RTRIM 去掉字符串右边的空格
REPEAT 返回重复的结果
TRIM 去掉字符串行尾和行头的空格
SUBSTRING 返回指定的字符串
LPAD 用字符串对最左边进行填充
RPAD 用字符串对最右边进行填充
STRCMP 比较字符串 s1 和 s2
REPLACE 进行字符串替换


下面通过具体的示例演示一下每个函数的用法


  • LOWER(str) 和 UPPER(str) 函数:用于转换大小写


image.png

image.png

image.png

image.png

image.png


数值函数


MySQL 支持数值函数,这些函数能够处理很多数值运算。下面我们一起来学习一下 MySQL 中的数值函数,下面是所有的数值函数


函数 功能
ABS 返回绝对值
CEIL 返回大于某个值的最大整数值
MOD 返回模
ROUND 四舍五入
FLOOR 返回小于某个值的最大整数值
TRUNCATE 返回数字截断小数的结果
RAND 返回 0 - 1 的随机值


下面我们还是以实践为主来聊一聊这些用法


  • ABS(x) 函数:返回 x 的绝对值


image.png

image.png

image.png

image.png


日期和时间函数


日期和时间函数也是 MySQL 中非常重要的一部分,下面我们就来一起认识一下这些函数


函数 功能
NOW 返回当前的日期和时间
WEEK 返回一年中的第几周
YEAR 返回日期的年份
HOUR 返回小时值
MINUTE 返回分钟值
MONTHNAME 返回月份名
CURDATE 返回当前日期
CURTIME 返回当前时间
UNIX_TIMESTAMP 返回日期 UNIX 时间戳
DATE_FORMAT 返回按照字符串格式化的日期
FROM_UNIXTIME 返回 UNIX 时间戳的日期值
DATE_ADD 返回日期时间 + 上一个时间间隔
DATEDIFF 返回起始时间和结束时间之间的天数


下面结合示例来讲解一下每个函数的使用


  • NOW(): 返回当前的日期和时间


image.png

image.png

image.png

image.png


  • DATE_FORMAT(date,fmt) 函数:按照字符串 fmt 对 date 进行格式化,格式化后按照指定日期格式显示


具体的日期格式可以参考这篇文章



https://blog.csdn.net/weixin_38703170/article/details/82177837


我们演示一下将当前日期显示为「年月日」的这种形式,使用的日期格式是 「%M %D %Y」


image.png


  • DATE_ADD(date, interval, expr type) 函数:返回与所给日期 date 相差 interval 时间段的日期


interval 表示间隔类型的关键字,expr 是表达式,这个表达式对应后面的类型,type 是间隔类型,MySQL 提供了 13 种时间间隔类型


表达式类型 描述 格式
YEAR YY
MONTH MM
DAY DD
HOUR 小时 hh
MINUTE mm
SECOND ss
YEAR_MONTH 年和月 YY-MM
DAY_HOUR 日和小时 DD hh
DAY_MINUTE 日和分钟 DD hh : mm
DAY_SECOND 日和秒 DD hh :mm :ss
HOUR_MINUTE 小时和分 hh:mm
HOUR_SECOND 小时和秒 hh:ss
MINUTE_SECOND 分钟和秒 mm:ss


  • DATE_DIFF(date1, date2) 用来计算两个日期之间相差的天数


image.png


查看离 2021 - 01 - 01 还有多少天


流程函数


流程函数也是很常用的一类函数,用户可以使用这类函数在 SQL 中实现条件选择。这样做能够提高查询效率。下表列出了这些流程函数


函数 功能
IF(value,t f) 如果 value 是真,返回 t;否则返回 f
IFNULL(value1,value2) 如果 value1 不为 NULL,返回 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


其他函数


除了我们介绍过的字符串函数、日期和时间函数、流程函数,还有一些函数并不属于上面三类函数,它们是


函数 功能
VERSION 返回当前数据库的版本
DATABASE 返回当前数据库名
USER 返回当前登陆用户名
PASSWORD 返回字符串的加密版本
MD5 返回 MD5 值
INET_ATON(IP) 返回 IP 地址的数字表示
INET_NTOA(num) 返回数字代表的 IP 地址


下面来看一下具体的使用


  • VERSION: 返回当前数据库版本


image.png

image.png

image.png

image.png




            </div>
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
SQL 存储 关系型数据库
138 张图带你 MySQL 入门(4)
138 张图带你 MySQL 入门(4)
64 0
138 张图带你 MySQL 入门(4)
|
SQL 关系型数据库 MySQL
138 张图带你 MySQL 入门(5)
138 张图带你 MySQL 入门(5)
59 0
138 张图带你 MySQL 入门(5)
|
存储 SQL 安全
138 张图带你 MySQL 入门(6)
138 张图带你 MySQL 入门(6)
55 0
138 张图带你 MySQL 入门(6)
|
SQL 关系型数据库 MySQL
138 张图带你 MySQL 入门(3)
138 张图带你 MySQL 入门(3)
62 0
138 张图带你 MySQL 入门(3)
|
存储 SQL 算法
47 张图带你 MySQL 进阶!!!(二)
主要介绍了基本的 SQL 命令、数据类型和函数,在具备以上知识后,你就可以进行 MySQL 的开发工作了,但是如果要成为一个合格的开发人员,你还要具备一些更高级的技能,下面我们就来探讨一下 MySQL 都需要哪些高级的技能
60 0
47 张图带你 MySQL 进阶!!!(二)
|
存储 SQL 关系型数据库
47 张图带你 MySQL 进阶!!!(四)
主要介绍了基本的 SQL 命令、数据类型和函数,在具备以上知识后,你就可以进行 MySQL 的开发工作了,但是如果要成为一个合格的开发人员,你还要具备一些更高级的技能,下面我们就来探讨一下 MySQL 都需要哪些高级的技能
77 0
47 张图带你 MySQL 进阶!!!(四)
|
SQL 存储 关系型数据库
47 张图带你 MySQL 进阶!!!(五)
主要介绍了基本的 SQL 命令、数据类型和函数,在具备以上知识后,你就可以进行 MySQL 的开发工作了,但是如果要成为一个合格的开发人员,你还要具备一些更高级的技能,下面我们就来探讨一下 MySQL 都需要哪些高级的技能
76 0
47 张图带你 MySQL 进阶!!!(五)
|
存储 SQL 关系型数据库
47 张图带你 MySQL 进阶!!!(三)
主要介绍了基本的 SQL 命令、数据类型和函数,在具备以上知识后,你就可以进行 MySQL 的开发工作了,但是如果要成为一个合格的开发人员,你还要具备一些更高级的技能,下面我们就来探讨一下 MySQL 都需要哪些高级的技能
67 0
47 张图带你 MySQL 进阶!!!(三)
|
存储 SQL 缓存
47 张图带你 MySQL 进阶!!!(一)
主要介绍了基本的 SQL 命令、数据类型和函数,在具备以上知识后,你就可以进行 MySQL 的开发工作了,但是如果要成为一个合格的开发人员,你还要具备一些更高级的技能,下面我们就来探讨一下 MySQL 都需要哪些高级的技能
110 0
47 张图带你 MySQL 进阶!!!(一)
|
SQL 存储 关系型数据库
138 张图带你 MySQL 入门(1)
138 张图带你 MySQL 入门(1)
101 0
138 张图带你 MySQL 入门(1)