• 售前

  • 售后

热门帖子
入门百科

MySQL 5.7常见数据范例

[复制链接]
忆困血馆闻 显示全部楼层 发表于 2021-8-14 15:08:46 |阅读模式 打印 上一主题 下一主题
——《深入浅出MySQL(第二版)》条记
数值类型

            整数类型            字节            最小值            最大值                                    TINYINT            1            有符号 -128;无符号 0            有符号 127;无符号 255                            SMALLINT            2            有符号 -2^16;无符号 0            有符号 2^16-1;无符号 2^17-1                            MEDIUMINT            3            有符号 -2^24;无符号 0            有符号 2^24-1;无符号 2^25-1                            INT\INTEGER            4            有符号 -2^32;无符号 0            有符号 2^32-1;无符号 2^33-1                            BIGINT            8            有符号 -2^64;无符号 0            有符号 2^64-1;无符号 2^65-1        
            浮点类型            字节            最大值            最小值                                    FLOAT            4                                                    DOUBLE            8                                
            定点数类型            字节            描述                                    DEC(M,D)\DECIMAL(M,D)            M+2            最大值取值范围与DOUBLE相同,给定DECIMAL的有效取值范围由M和D决定        
            位类型            字节            最小值            最大值                                    BIT(M)            1~8            BIT(1)            BIT(8)        整数类型

对于整数类型,MySQL支持在类型名称背面利用
  1. (n)
复制代码
的方式指定表现宽度,比方
  1. int(5)
复制代码
表示当数值宽度小于5位时,在数字前面填满宽度,如果不表现指定宽度则默以为
  1. int(11)
复制代码
。一般配合zerofill利用,就是用'0'添补。
示例:
  1. --创建表t1,有id1和id2两个字段,指定数值宽度分别为int和int(5)
  2. mysql> create table t1 (id1 int,id2 int(5));
  3. mysql> desc t1;
复制代码
  1. --在id1和id2中都插入数值1
  2. mysql> insert into t1 values (1,1);
  3. mysql> select * from t1;
复制代码
  1. --分别给id1和id2字段增加zerofill参数
  2. mysql> alter table t1 modify id1 int zerofill;
  3. mysql> alter table t1 modify id2 int(5) zerofill;
复制代码

设置了宽度限定后,如果插入大于宽度限定的值,不会对插入的数据有任何影响,还是按照类型的书记精度进行保存。这时,宽度格式实际已经没有意义,左边不会再添补任何的“0”字符。
  1. --向表t1的id1中插入1,id2中插入12345678
  2. mysql> insert into t1 values(1,12345678);
  3. mysql> select * from t1;
复制代码

所有的整数类型都有一个可选属性
  1. UNSIGNED
复制代码
(无符号),如果需要在字段内里保存非负数大概需要较大的上限值,可以用此选项。而当一个列指定为zerofill,则MySQL自动为该列添加UNSIGNED属性。
别的,整数类型还有一个独有的
  1. AUTO_INCREMENT
复制代码
属性,表示该列的值是自增型。AUTO_INCREMENT值一般从1开始,每行增加1。在插入NULL到一个AUTO_INCREMENT列时,MySQL插入一个比该列当前最大值大1的值。一个表中最多只能有一个列是AUTO_INCREMENT的。
对于任何想要利用AUTO_INCREMENT的列,应该界说为NOT NULL,并界说为UNIQUE。
浮点类型

对于小数的表示,MySQL分为浮点数和定点数两种。浮点数包罗float(单精度)和double(双精度),而定点数只有decimal一种。定点数在MySQL内部以字符串情势存放,比浮点数更准确,适适用来表示货币等精度高的数据。
浮点数和定点数都可以用类型名称后加"(M,D)"的方式来进行表示,"(M,D)"表示该值一共表现M位,小数有D位。MySQL保存浮点值时对超出位接纳的是四舍五入的方式。因此如果在float(5,3)中插入123.006,则保存的值为123.01。float和double在不指定精度时,默认按照实际硬件和操作体系来决定;而decimal不指定时,默认整数位为10,小数位为0。
示例:
  1. --创建表tf,分别将id1,id2,id3字段设置为float(5,2),double(5,2),decimal(5,2)
  2. mysql> create table tf( id1 float(5,2),id2 double(5,2),id3 decimal(5,2));
复制代码
  1. --向表中三个字段分别插入数据1.23
  2. mysql> insert into tf values(1.23,1.23,1.23);
复制代码
  1. --向表中分别插入数据1234.005
  2. mysql> insert into tf values(1234.005,1234.005,1234.005);
复制代码
  1. --向表中分别插入数据123.005
  2. mysql> insert into tf values(123.005,123.005,123.005);
复制代码
  1. --向表中分别插入数据123.006,123.006,123.004
  2. mysql> insert into tf values(123.006,123.006,123.004);
复制代码
  1. --去掉表tf字段的精度,并重新插入1.23
  2. mysql> alter table tf modify id1 float;
  3. mysql> alter table tf modify id2 double;
  4. mysql> alter table tf modify id3 decimal;
  5. mysql> insert into tf values(1.23,1.23,1.23);
  6. mysql> desc tf;
复制代码

  1. --向表中分别插入1.234567123321,1.234567123321123321,1.23234233
  2. mysql> insert into tf values(1.234567123321,1.234567123321123321,1.23234233);
复制代码

位类型

对于BIT类型,用于存放位字段值,BIT(M)可以用来存放多位二进制数,M范围从1~64,如果不写,默以为1位。而直接利用SELECT命令不会看到查询结果,需利用
  1. bin()
复制代码
(表现为二进制)函数大概
  1. hex()
复制代码
(表现为16进制)函数进行读取。
示例:
  1. --创建表tb,定义字段id1为bit(1),id2字段为bit
  2. mysql> create table tb(id1 bit(1),id2 bit);
复制代码
  1. --向tb中插入1,1
  2. mysql> insert into tb values(1,1);
  3. mysql> select * from tb;
  4. mysql> select bin(id1),hex(id2) from tb;
复制代码

数据插入bit两类型字段时,起首转换为二进制,如果位数答应,则成功插入;如果位数超出界说的位数,则插入失败。

时间类型

MySQL中由多种数据类型可以用于日期和时间的表示,下表是MySQL5.0中所有支持的日期和时间类型。
            日期和时间类型            字节            最小值            最大值                                    DATE            4            1000-01-01            9999-12-31                            DATETIME            8            1000-01-01 00:00:00            9999-12-31 23:59:59                            TIMESTAMP            4            19700101080001            2038年某个时间                            TIME            3            -838:59:59            838:59:59                            YEAR            1            1901            2155        
每种时间类型都有一个有效范围,如果超出这个范围,在默认的SQLMode下,体系会进行错误提示,并将以零值来进行存储。
数据类型

零值表示DATE0000-00-00DATETIME0000-00-00 00:00:00TIMESTAMP00000000000000TIME00:00:00YEAR0000
  1. --创建表tdt
  2. mysql> create table tdt(dt date, dttm datetime, tms timestamp,tm time,yr year);
复制代码
  1. --使用now()函数向表中插入当前时间
  2. mysql> insert into tdt values(now(),now(),now(),now(),now() );
复制代码
  1. --向tms中插入NULL,MySQL会自动赋值系统时间
  2. mysql> insert into tdt(tms) values(null);
复制代码

MySQL只会给表中第一个TIMESTAMP字段赋值体系时间,如果有其他的,则赋值为0值。
  1. --修改表tdt,增加TIMESTAMP类型的tms1列,并给tms,tms1赋值null
  2. mysql> alter table tdt add tms1 timestamp;
  3. mysql> desc tdt;
  4. mysql> insert into tdt(tms,tms1) values(null,null);
复制代码

TIMESTAMP有一个重要特点,就是和失去相干。当插入提起时,会先转换为本地时区后存放;而从数据库取出时,需要将日期转换为本地时区后表现。
  1. --创建表tdt1,包含字段tms,dt
  2. mysql> create table tdt1(tms timestamp,dt datetime);
复制代码
  1. --查看当前时区,并向表tdt1中插入系统时间
  2. mysql> show variables like 'time_zone';
  3. mysql> insert into tdt1 values(now(),now());
复制代码

可以发现,时区的值为
  1. SYSTEM
复制代码
,这个值默认是和主机的时区一致的,由于处在中国,这里实际是东八区(+8:00)。
  1. --修改时区为东九区,再次查看tdt1中的时间
  2. mysql> set time_zone='+9:00';
复制代码

字符串类型

MySQL中提供了多种对字符串数据的存储类型,不同版本有所差异。以5.0为例,MySQL包罗了
  1. CHAR
复制代码
  1. VARCHAR
复制代码
  1. BINARY
复制代码
  1. VARBINARY
复制代码
  1. BLOB
复制代码
  1. TEXT
复制代码
  1. ENUM
复制代码
  1. SET
复制代码
等多种。
            数据类型            描述即存储                                    CHAR(M)            M为0~255之间的整数                            VARCHAR(M)            M为0~65535之间的整数,值的长度+1个字节                            TINYBLOB            答应长度0~255字节,值的长度+1个字节                            BLOB            答应长度0~65535字节,值的长度+2个字节                            MEDIUMBLOB            答应长度0~167772150字节,值的长度+3个字节                            LONGBLOB            答应长度0~4294967295字节,值的长度+4个字节                            TINYTEXT            答应长度0~255字节,值的长度+1个字节                            TEXT            答应长度0~65535字节,值的长度+2个字节                            MEDIUMTEXT            答应长度0~167772150字节,值的长度+3个字节                            LONGTEXT            答应长度0~4294967295字节,值的长度+4个字节                            VARBINARY(M)            答应长度0~M个字节的变长字节字符串,值的长度+1个字节                            BINARY(M)            答应长度0~M个字节的定长字节字符串        
方法
CHAR和VARCHAR

两者很雷同,都用来保存MySQL中较短的字符串。二者重要区别在于存储方式的不同:CHAR列的长度固定为创建表时声明的长度;而VARCHAR列中的值为可变长字符串。在检索时,CHAR会删除尾部的空格,而VARCHAR不会。
  1. --创建表tc,包含两个字段ch(char(6))和vc(varchar(6))
  2. mysql> create table tc (ch char(6),vc varchar(6));
  3. --向ch和vc字段插入'abc   '
  4. mysql> insert into tc values('abc   ','abc   ');
  5. --查询字段长度
  6. mysql> select length(ch),length(vc) from tc;
复制代码


BINARY和VARBINARY

雷同于CHAR和VARCHAR,不同的是它们存储的是二进制的字符串。
  1. --创建表tbc,包含字段bc(binary(6))、vbc(varbinary(6))
  2. mysql> create table tbc (bc binary(6),vbc varbinary(6));
  3. --向表中插入数据('a  ','a  ')
  4. mysql> insert into tbc values('a  ','a  ');
  5. --查看字段值长度
  6. mysql> select length(bc),length(vbc) from tbc;
复制代码

当保存BINARY值时,MySQL通过在值的末了添补
  1. 0x00
复制代码
(零字节)以达到指定的字段界说长度。
  1. --通过hex()函数查看tbc中数据的保存
  2. mysql> select length(bc),length(vbc) from tbc;
复制代码

ENUM类型

枚举类型,它的值范围需要在创建表时通过枚举方式表现指定,对1255个成员的枚举,需要1个字节存储;对于25665535个成员,需要2个字节存储。最多答应有65535个成员。
  1. --创建表te,包含字段f1(enum('a','b','c'))
  2. mysql> create table te(f1 enum('a','b','c'));
  3. --向表中插入几条记录
  4. mysql> insert into te values('a'),('B'),('3'),(null);
复制代码

ENUM是忽略大小写的。还支持利用下标(从1开始,下标越界时报错)的方式插入数据。特殊值
  1. '0'
复制代码
表示一个空值。

SET类型

SET和ENUM非常雷同,也是一个字符串对象,内里可以包含0~64个成员。根据成员个数不同,存储也有所不同。
  1. 1~8个成员的集合,占1个字节
  2. 9~16个成员的集合,占2个字节
  3. 17~24个成员的集合,占3个字节
  4. 25~32个成员的集合,占4个字节
  5. 32~64个成员的集合,占8个字节
复制代码
而且,SET类型一次可以选择多个成员。
  1. --创建表ts,包含字段f1(set())
  2. mysql> create table ts (f1 set('a','b','c','d'));
  3. mysql> insert into ts values('a,b'),('a,d'),('b,c,d');
复制代码
  1. --向表中插入数据('a,b,a,c,d,d')
  2. mysql> insert into ts values('a,b,a,c,d,d');
复制代码

SET类型可以从答应值聚会合选择恣意个元素进行组合,以是对于输入的值只要在答应值的组合范围内,都可以正确的纪录到SET类型的列中。对于超出答应范围的值,报错。而有重复成员的聚集,将自动去重。
到此这篇关于MySQL 5.7常见数据类型的文章就介绍到这了,更多相干MySQL数据类型内容请搜刮草根技能分享从前的文章或继承欣赏下面的相干文章希望各人以后多多支持草根技能分享!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作