前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >第四章《MySQL的数据类型和运算符》

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

作者头像
互联网-小阿宇
发布2022-11-21 17:25:23
8240
发布2022-11-21 17:25:23
举报
文章被收录于专栏:互联网-小阿宇互联网-小阿宇

一、数据类型介绍: (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 ,即 2x24+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) <> 不等于 ,也可以写成!=

代码语言:javascript
复制
 >      大于
 <      小于
>=        大于等于
<=      小于等于
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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.位运算符: 运算符 作用 | 位或 & 位与 ^ 位异或 << 位左移 >> 位右移 ~ 位取反

代码语言:javascript
复制
 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);

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-03-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档