第四章《MySQL的数据类型和运算符》

第四章《MySQL的数据类型和运算符》

一、数据类型介绍:
(1)数据表由多个字段组成,每一个字段都指定了自己的数据类型,指定了数据类型后,也就决定了向字段插入数据的内容;
(2)不同的数据类型也决定了MySQL在存储数据的时候使用的方式,以及在使用数据的时候选择什么运算符进行运算;
(3)数值数据类型:TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT、FLOAT、DOUBLE、DECIMAL
(4)日期/时间数据:YEAR、TIME、DATE、DATETIME、TIMESTAMP
(5)字符串数据类型:CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM、SET
二、数值类数据类型:
(1)数值类数据类型主要用来存储数字,不同的数值类型提供不同的取值范围,可以存储的值范围越大,需要的存储空间也越大;
(2)数值型分为:整数类型,浮点数类型,定点数类型;

1.整数类型(整数类型的属性字段可以添加auto_increment自增约束条件)
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
2.浮点数类型和定点数类型:
(1)MySQL中使用浮点数和定点数来表示小数,浮点数有两种类型:单精度浮点数(FLOAT),
双精度浮点数(DOUBLE),定点数只有DECIMAL;
(2)浮点数和定点数都可以用(M,D)来表示,其中M是精度,表示总共的位数(不算点号),D是标度,表示小数的位数
(3)DECIMAL实际上是以字符串形式存放的,在对精度要求比较高的时候(如货币、科学数据等)使用DECIMAL类型比较好;
(4)浮点数相对于定点数的有点是在长度一定的情况下,浮点数能够表示更大的数据范围(取值范围更大),他的缺点是会引起精度的问题
在这里插入图片描述
在这里插入图片描述

3.日期时间类型;
(1)MySQL有多重表示日期的数据类型,比如:当只记录年份信息时,可以使用YEAR类型,而没有必要使用DATE类型;
(2)每一个类型都有合法的取值范围,当数据是不合法的值时,系统将“零”值插入到数据库中
在这里插入图片描述
1、YEAR
(1) 格式:以4位字符串格式表示的 YEAR ,范围为 ‘1901’ ~ ‘2155’
(2) 格式:以4位数字格式表示的 YEAR ,范围为 1901 ~ 2155
(3) 格式:以2位字符串格式表示的 YEAR ,范围为 ‘00’ ~ ‘99’ ,其中,‘00’ ~ ‘69’ 被转换为 2000 ~ 2069 ,‘70’ ~ ‘99’ 被转换为 1970 ~ 1999
(4) 格式:以2位数字格式表示的 YEAR ,范围为 1 ~ 99 ,其中,1 ~ 69 被转换为 2001 ~ 2069 ,70 ~ 99 被转换为 1970 ~ 1999

2、TIME
(1) TIME 类型的格式为 HH:MM:SS ,HH 表示小时,MM 表示分钟,SS 表示秒
(2) 格式:以 ‘HHMMSS’ 格式表示的 TIME ,例如 ‘101112’ 被理解为 10:11:12 ,但如果插入不合法的时间,如 ‘109712’ ,则被存储为 00:00:00
(3) 格式:以 ‘D HH:MM:SS’ 字符串格式表示的 TIME ,其中 D 表示日,可以取 0 ~ 34 之间的值,在插入数据库的时候 D 会被转换成小时,如 ‘2 10:10’ 在数据库中表示为 58:10:00 ,即 2×24+10 = 58

3、DATE
(1) DATE 类型的格式为 YYYY-MM-DD ,其中,YYYY 表示年,MM 表示月,DD 表示日
(2) 格式:‘YYYY-MM-DD’ 或 ‘YYYYMMDD’ ,取值范围为 ‘1000-01-01’ ~ ‘9999-12-31’
(3) 格式:‘YY-MM-DD’ 或 ‘YYMMDD’ ,这里 YY 表示两位的年值,范围为 ‘00’ ~ ‘99’ ,其中,‘00’ ~ ‘69’ 被转换为 2000 ~ 2069 ,‘70’ ~ ‘99’ 被转换为 1970 ~ 1999
(4) 格式:YY-MM-DD 或 YYMMDD ,数字格式表示的日期,其中 YY 范围为 00 ~ 99 ,其中,00 ~ 69 被转换为 2000 ~ 2069 ,70 ~ 99 被转换为 1970 ~ 1999

4、DATETIME
(1) DATETIME 类型的格式为 YYYY-MM-DD HH:MM:SS ,其中,YYYY 表示年,MM 表示月,DD 表示日,HH 表示小时,MM 表示分钟,SS 表示秒
(2) 格式:‘YYYY-MM-DD HH:MM:SS’ 或 ‘YYYYMMDDHHMMSS’ ,字符串格式,取值范围为 ‘1000-01-01 00:00:00’ ~ ‘9999-12-31 23:59:59’
(3) 格式:‘YY-MM-DD HH:MM:SS’ 或 ‘YYMMDDHHMMSS’ ,字符串格式,其中 YY 范围为 ‘00’ ~ ‘99’ ,其中,‘00’ ~ ‘69’ 被转换为 2000 ~ 2069 ,‘70’ ~ ‘99’ 被转换为 1970 ~ 1999
(4) 格式:YYYYMMDDHHMMSS 或 YYMMDDHHMMSS ,数字格式,取值范围同上

5、TIMESTAMP
(1) TIMESTAMP 类型的格式为 YYYY-MM-DD HH:MM:SS,显示宽度固定在19个字符
(2) TIMESTAMP 与 DATETIME 的区别在于,TIMESTAMP 的取值范围小于 DATETIME 的取值范围
(3) TIMESTAMP 的取值范围为 1970-01-01 00:00:01 UTC ~ 2038-01-19 03:14:07 UTC ,其中 UTC 是世界标准时间,存储时会对当前时区进行转换,检索时再转换回当前时区

单纯日期类的数据类型的数据插入时可以不用字符串格式,但是有time的就必须用字符串格式
日期和时间类型,如果插入的数据时纯数字格式,可以不用引号,如果数据中有连字符,必须用引号;
在这里插入图片描述

字符串类型:
(1)字符串类型用来存储字符串的数据,还可以存储比如图片和声音的二进制数据
(2)MySQL支持两种字符串类型:文本字符串和二进制字符串在这里插入图片描述
在这里插入图片描述
2.如何选择数据类型;
2.1整数和浮点数及定点数。
(1)如果不需要小数部分,则使用整数来保存数据,如果需要表示小数部分,则使用浮点数类型和定点数,对于浮点数据列,存入的数值会对该列定义的小数位进行四舍五入。
(2)浮点数据类型中,DOUBLE类型精度比FLOAT类型高,因此,如果要求存储精度较高时,应该选择DOUBLE类型。当然DOUBLE它占用的存储空间更大一点。
(3)浮点数相对于定点数DECIMAL的优势是:在长度一定的情况下,浮点数能表示的数据范围更大,但是由于浮点数容易产生误差,因此对精度要求高,建议用定点数;
(4)DECIMAL在MySQL当中是以字符串存储的,用于定义货币等对精度要求高的数据,在数据迁移中,FLOAT(M,N)是非标准的SQL定义,所以数据迁移时可能会出现问题,最好不要用;
(5)另外两种浮点数在进行运算的时候也容易出问题,所以如果进行数值的比较最好用定点数。

2.2日期和时间类型;
(1)如果只需要记录年末,用YEAR类型:如果只需要记录时间,用TIME类型;
(2)如果同时记录日期和时间可以使用DATETIME或者是TIMESTAMP这两种类型;
TIMESTAMP的取值范围小于DATETIME;
(3)默认情况下,当插入一条记录但并没有指定TIMESTAMP这个列值时,MySQL默认会把TIMESTAMP列设为当前时间

3.字符串;
3.1 CHAR和VARCHAR;
(1)CHAR(M)是固定长度字符,VARCHAR(M)是可变长度的字符;CHAR会自动删除插入数据尾部的空格,VARCHAR不会删除尾部空格,

CHAR(M): ‘abcd’ M字节 VARCHAR(M) ‘abcd ’ 6字节

(2)CHAR时固定长度,所以他的处理速度比VARCHAR的速度更快,但是他的特点时浪费存储空间;
(3)具体选择CHAR还是VARCHAR类型,也要参考数据表的存储引擎,对于yISAM引擎,最好使用固定长度的数据列代替可变长度的数据列。这样可以使整个表静态化,从而使数据检索速度更快,用空间换时间。对于InnoDB引擎,使用可变长度的数据列,因为InnoDB数据表的存储格式不分固定长度和可变长度,因此使用CHAR不一定比使用VARCHAR更快,但由于VARCHAR是按照实际的长度来存储的,比较节省空间,对磁盘I/O和数据存储总量比较好。
在这里插入图片描述
3.2BIT
(1)BIT数据类型用来保存位字段值,即以二进制的形式保存数据;例如:保存13,则实际保存的是13的二进制值,1101;
(2)BIT是位字段类型,BIT(M)中的M表示每个值的位数,范围1-64,如果M被省略,则默认M为1,如果BIT(M)列分配的长度小于M位,则在值的左边用0/来填充;
(3)如果需要位数至少为4位的BIT类型,即可定义BIT(4),则转换为二进制后大于1111的数据插入时,会有误差,它只能显示位数为4的最大值,比如我们插入的值是16,16的二进制是10000,他的位数是5,但是我们规定的是4,所以只能存入15,就产生误差

创建一个表(二进制)
在这里插入图片描述
查看数据类型为BIT的二进制
在这里插入图片描述

3.3BINARY(M)和VARBINARY(M)
(1)BINARY和VARBINARY类型类似于CHAR和VARCHAR,不同的是他们包含二进制字符串;
(2)BINARY类型的长度是固定的,指定长度后,不足最大长度的,将在他们右边填充,‘\x00’以补齐指定长度
(3)VARBINARY类型的长度是可变的,指定长度后,其长度可以在0到最大值之间

3.4 BLOB和TEXT
(1)BLOB是二进制字符串,TEXT是非二进制字符串,两者均可存放大容量的信息,BLOB主要存放图片,音频等信息,而TEXT只能存放纯文本文件。

3.5 ENUM和SET
(1)ENUM只能取单值(只能取他给出的值的其中之一),他的数据列表是一个枚举集合,他的例举的值最多可以有65535个;
(2)SET可以取多个值,他的列表中最多可例举64个值
(3)ENUM和SET的值是以字符串形式出现的,但在内部MySQL以数值的形式进行存储;
ENUM:
(1)在基本的数据类型中,无外乎就是写数字和字符串,但是某些事物是较难用数字和字符来准确的表示,比如一周有7天,分别是Sunday、Monday、Tuesday、wednesday、thursday、friday、saturday,如果我们用数字0、1、2、3、4、5、6来表示这七天,那么多下来的数字该怎么办呢?而且这样的设置很容易让数据出错,超出取值范围,这种情况下,我们就可以用枚举这种数据类型来自定义取值范围,ENUM是一个字符串对象,其值为表创建时,在字段中规定的ENUM例举出来的那些值中的某一个。
语法:
字段名 ENUM (‘值1’,‘值2’,‘值3’,。。。);
我们在取枚举中的值的时候还可以使用它的(索引)下标,下标的值从1 开始。

往表里插入数据的语法:
INSERT INTO 表名 (字段1、字段2,。。。) values(值1,值2,。。。),(值1,值2),。。。
可以同时插入多组

SET:
(1)SET是一个字符串对象,可以有零个或多个值,SET列最多可以有64个成员,其值为标创建时规定的一列值,语法:SET (‘值1’,‘值2’,。。。‘值n’)
(2)与ENUM类型相同,SET值在内部用整数表示,列表中每一个值都有一个索引编号
(3)与ENUM类型不同的是 ,ENUM类型的字段只能从定义的列值中选择一个值插入,而SET类型的列可从定义的列值中选择多个字符的联合
(4)如果插入SET字段中列值有重复,则MySQL自动删除重复的值,插入SET字段的值的顺序并不重要,MySQL会在存入数据库时,按照定义的顺序显示
在这里插入图片描述

在这里插入图片描述
更新表数据的语法;
UPDATE 表名 SET 字段名=‘值’ WHERE

在这里插入图片描述
在这里插入图片描述

三、运算符介绍:
1.mysql的算数运算符;
2.比较运算符;
3.逻辑运算符
4.位运算符

1算数运算符
(1)+:加法运算;
(2) – :减法运算
(3)* :乘法运算
(4)/: 除法运算
(5)DIV:求商
(6)MOD或者% :求余/取模
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2.比较运算符:
= 等于
<=> 安全等于 (和 “=”的区别是“<=>”可以判断null)
<> 不等于 ,也可以写成!=

 >      大于
 <      小于
>=        大于等于
<=      小于等于

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
第四章《MySQL的数据类型和运算符》

IS NULL 判断一个值是否为空值NULL (这个要判断的值写在前面)
ISNULL (值)同上
在这里插入图片描述
在这里插入图片描述

IS NOT NULL 判断一个值是否不为NULL
在这里插入图片描述
GREATEST(值1,值2,。。。) 当有两个或多个参数时,取其中的最大值,如果参数里有NULL,显示NULL
在这里插入图片描述
LEAST (值1,值2,。。。) 当有两个或多个参数时,取其中的最小值,如果参数里有NULL,显示NULL
在这里插入图片描述
值 BETWEEN min值 AND max值 判断一个值是否在两个范围内,
min值是最小值 max是最大值
min<=值<=max
在这里插入图片描述

值 IN 判断值是否在IN给出的范围内在返回1,不在返回0;in后面给的值由NULL的时候如果我们要判断这个值在其中则返回1 ,不在返回NULL。
在这里插入图片描述
在这里插入图片描述
NOT IN 判断值是否不在后面给出的范围内,在返回1,不在返回0;in后面给的值由NULL的时候如果我们要判断这个值在其中则返回1 ,不在返回NULL。
在这里插入图片描述
LIKE 模糊匹配
REGEXP 正则表达式

LIKE:
(1)like运算符用来匹配字符串,如果匹配则返回1,如果不匹配则返回0;
(2)like经常使用两种通配符,’%’ 用于匹配任何数据的字符,包括零字符:‘_’只能匹配单个字符;
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
REGEXP :
(1)REGEXP 运算符用来匹配字符串,如果匹配返回1,如果不匹配返回0;
(2)REGEXP 使用的几种通配符;
‘^’ 用来匹配以什么开头的字符串;
‘$’ 用来匹配以什么结尾的字符串;
‘.’ 用来匹配任何一个单字符串;
‘[]’ 用来匹配方括号里面的任意字符串;
‘*’用来匹配零个或多个在它前面的字符;
在这里插入图片描述
3.逻辑运算符:
运算符 作用
NOT或! 逻辑非
AND 或&& 逻辑与
OR 或 || 逻辑或
XOR 逻辑异或
1.逻辑非(NOT或!)
(1)当操作数为0时,返回1;
(2)当操作数不为0时,返回0;
(3)当操作数为NULL时,返回NULL;
在这里插入图片描述
2.逻辑与(and或&&);
(1)当所有操作数均为非0值,并且不为NULL时,返回1
(2)当一个或多个操作数为0时,返回0;
(3)当操作数里没有0但是有NULL,返回NULL;
在这里插入图片描述
在这里插入图片描述
3.逻辑或(OR或||);
(1)任意一个操作数为非零值时,且不是NULL,结果为1.否则为0;
(2)当两个操作数均为NULL时,或者一个为0一个为NULL时,返回NULL;
在这里插入图片描述
4.逻辑异或:(XOR)
(1)任何一个操作数为NULL,返回NULL;
(2)对于非NULL的操作数,如果两个操作数时非0值或者都是0值,则返回0;
(3)如果一个为0值,一个为非0值,返回1,
(4)a xor b的判断计算等同于a and (not b)或者(not a)and b;
在这里插入图片描述
4.位运算符:
运算符 作用
| 位或
& 位与
^ 位异或
<< 位左移
>> 位右移
~ 位取反

 1.位或运算符(|):多个操作数对应的二进位有一个或多个1,则该位的运算结果为1,否则为0;
 比如10的二进制是1010,14的二进制是1110,他两个的位或运算结果1110 ,转换成十进制就是14

2.位与运算符(&):对应二进制全为1时,结果位为1,否则为0;
3.位异或(^):对应的二进制位不相同时,结果位为1,否则为0;
4.位左移(<<):将一个值的二进制位上的1向左移动指定的位数
5.位右移(>>):使一个数值的二进制位上的1往右移动指定的单位,左边被移走的1用0来补充,右边被移出边界的1被舍弃
6.位取反(~):将对应的二进制数逐位取反(1变为0,0变为1);

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

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/101974.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Java大数据方向学习路径导航[通俗易懂]

    Java大数据方向学习路径导航[通俗易懂]Java8各技术栈笔记与相关文档链接

  • 如何新建vue项目(如何配置vue的开发环境)

    一、vue开发环境搭建1、安装nodejs步骤:在node官网(https://nodejs.org/en/download/)选择跟自己的电脑匹配的版本进行下载,然后一步步的安装即可,在cmd控制台输入node-v,如果出现版本信息即表示安装成功。2、npm包管理器是集成在node中的,所以直接输入npm-v就能查看到版本信息,若出现版本信息则表示npm能正常使用。3、输入npminstall-gcnpm–registry=http://registry.npm.taobao.o

  • 小型电裁剪刀_手动裁剪

    小型电裁剪刀_手动裁剪由于简书经常打不开,或者打开慢,不靠谱,还是把文章迁移到CSDN吧。简书链接:https://www.jianshu.com/p/8c6508cab763有时候想对摄像头采集的视频流进行区域裁剪,可以使用libyuv这个库,原理就是先把NV12转换为i420,对i420做裁剪,然后再把i420转换为NV12,NV12再转换为CVPixelBufferRef,CVPixelBufferRef再转…

  • Cloudsim学习笔记——基本知识

    Cloudsim学习笔记——基本知识Cloudsim澳大利亚墨尔本学校的网格实验室和Gridbus项目推出,是在离散事件模拟包SimJava上开发的函数库,继承了GridSim的编程模型,特点:支持大型云计算的基础设施的建模和仿真; 一个自足的支持数据中心、服务代理人、调度和分配策略的平台独特功能:提供虚拟化引擎,旨在数据中心节点上帮助建立和管理多重的、独立的、协调的虚拟化服务; 在对虚拟化服务分配处理核心时能够在时…

    2022年10月13日
  • deepin安装rabbitvcs svn[通俗易懂]

    deepin安装rabbitvcs svn[通俗易懂]https://bbs.deepin.org/post/189817

  • webrtc fec_webrtc neteq

    webrtc fec_webrtc neteq转自:https://www.jianshu.com/p/06a27ebacec7在基于IP网络的多媒体通信系统(比如WebRTC)中,网络丢包对多媒体通信质量有非常严重的影响:例如造成视频的马赛克、图像模糊、帧率下降等问题,造成音频的声音失真、噪声干扰、音频中断等问题。这都会严重影响系统的通信质量,造成非常差的用户体验。WebRTC主要采取两种手段对抗网络丢包:丢包重传(NACK)和前向纠错(F…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号