六天带你玩转Mysql笔记--第二天

来源:互联网 发布:dede源码素材资源网 编辑:程序博客网 时间:2024/05/27 16:42

六天带你玩转Mysql笔记--第二天

1. 数据类型(列类型)

1.1数值型

1.1.1整数型

1.1.2 小数型

1.2时间日期类型

1.3 字符串类型

1 .3.1 定长字符串(char

1.3.2变长字符串varchar

1.3.3 文本字符串

1.3.4 枚举字符串

1.3.5 集合字符串

2. Mysql记录长度

3. 列属性

3.1 空属性

3.2列描述comment

3.3默认值

 

1. 数据类型(列类型)

1)数据类型:对数据进行统一的分类,从系统的角度出发时为了能使用统一的方式进行管理,更好地利用有限的空间。

2SQL中将数据类型分成了三大类:数值类型字符串类型时间日期类型

 

1.1数值型

数值型数据:都是数据。

系统将数值型分为整数型和小数型。

 

1.1.1整数型

SQL中药考虑如何节省磁盘空间,所以系统将整形细分为5类。

u Tinyint 迷你整形,使用1个字节存储,表示状态最多为256种。

u Smallint 小整形,使用2个字节存储,表示状态最多为65536种。

u Mediuint 中整形,使用3个字节存储。

u Int 标志整形,使用4个字节存储。

u Bigint 大整形,使用8个字节存储

 

1)使用相应数据类型时,存储的值需在规定的范围内。

2SQL中的数值类型全部都是默认有符号:分正负

(3)每个字段数据类型之后括号中的数字代表的是显示宽度

(4)显示宽度的意义:当数据显示宽度不够的时候,会自动让数据变成对应的显示宽度。通常需要搭配一个前导0来增加宽度,不改变值大小。Zerofill(零填充)会导致无符号数。

(5)零填充的意义(显示宽度):保证数据格式

 

1.1.2 小数型

小数型:带有小数点或者范围超出整形的数值类型

SQL中将小数型分为:浮点型和定点型

 

u 浮点型:小数点浮动,精度有限,而且会丢失精度。

Float:单精度,占用4个字节存储数据,精度范围大概7位左右。

Double:双精度,占用8个字节存储数据,精度范围大概为15为左右。

创建浮点数表:(1)直接float(表示没有小数部分)

(2)float(M,D) M代表总长度,D代表小数部分长度,整形长度  为(M-D

(3)插入的数据可以是小数,也可以是科学计数法。

(4)整数部分 不能超出长度,小数部分可以。(45入)

u 定点型:小数点固定,精度固定,不会丢失精度。

绝对保证整数部分和不会被四舍五入(不会丢失精度),小数部分有可能(理论小数部分也不会丢失精度)。

1.2时间日期类型

 


1.3 字符串类型

SQL中,将字符串类型分成了6类:charvachartextblobenumset

1.3.1 定长字符串(char

1)在磁盘(二维表)中定义结构时,就确定了最终数据的存储长度。

2Char(L)

L代表存储长度,单位为字符,最大长度值为255

Char[4]utf8环境下,需要4*3=12个字节。

 

1.3.2变长字符串varchar

(1)在分配空间时,按照最大的空间分配。根据具体的数据来确定用多少空间。

(2)Varchar(L)L表示字符串长度,理论长度65536个字符,但是会多出12个字节来确定存储的实际长度。

(3)Varchar(10):若存了10个汉字,utf8环境下占用空间:10*3+1=31

定长与变长的存储实际空间(UTF8)

实际存储数据

Char(4)

Varchar(4)

Char占用字节

Varchar占用字节

ABCD

ABCD

ABCD

4*3=12

4*3+1=13

A

A

A

4*3=12

1*3+1=4

ABCDE

不能存储

不能存储

数据超过长度

数据超过长度

 

如何选择定长或者变长字符串?

定长的磁盘空间比较浪费,但是效率高。如果数据长度基本一样,就使用定长,如身份证,手机号码,电话号码等。

变长的磁盘空间比较节省,但是效率低。如果不同数据长度有变化,如姓名,地址。

1.3.3 文本字符串

如果数据量非常大(超过255)就会使用文本字符串。文本字符串根据储存的数据格式进行分类:textblob

Text:储存文字(二进制数据实际上都是只存数据的储存路径)

Blob:储存二进制数据(通常不用)

 

1.3.4 枚举字符串

1)枚举(enum):事先将所有可能出现的结果都设计好,实际上储存的数据必须是规定好的数据中的一个。

2)枚举的定义:enum(可能出现的元素列表);

3)枚举作用

作用1规范数据格式,数据只能是规定的数据中的一个。

作用2节省储存空间(枚举别名:单选框)。在mysql中,系统自动转换数据格式。

(4)枚举原理:枚举在进行数据规范的时候(定义的时候),系统自动建立一个数字与枚举元素的对应关系(关系放到日志中)。

在进行数据插入的时候,系统自动将字符转成对应的数字存储。

在进行数据提取的时候,系统自动将数值转换成对应的字符串显示。

5)枚举存储的是数值(1,2.....),故可直接插入数值。

 

 

1.3.5 集合字符串

1)集合跟枚举相似,实际存储的是数值,而不是字符串(集合是多选)

2)集合的使用方式

定义:set(元素列表)

使用:可以使用元素列表中的元素,使用逗号分隔。

(3) 集合中每一个元素都是对应一个二进制位,被选中为1,没有则为0.

 

2. Mysql记录长度

(1)Mysql规定:任何一条记录最长不能超过65535个字节(varchar永远达不到理论值)。

(2)Utf8下的varchar的实际顶配:2184421844*3+2=65534)字符

(3)Gbk下的varchar的实际顶配:3276632766*2+2=65534)字符

(4)Mysql记录中,如果有任何一个字段允许为空,那么系统会自动从整个记录中保留一个字节来存储NULL(若想释放Null所占用的字节,必须保证所有的字符都不允许为空)。

(5)Mysqltext文本字符串,不占用记录长度(额外存储),但是text文本字符串也是属于记录的一部分,一定需要占用记录中的部分长度(10个字符串)。

 

3. 列属性

(1)真正约束自动的是数据类型,但是数据类型的约束很单一,需要有一些额外的约束来保证数据的合法性。

(2)列属性:NULL/NOT NULLdefaultprimaryunique keyauto_incrementcomment

3.1 空属性

两个值NULL(默认的)和NOT NULL(不为空)。

虽然默认为空,但是实际开发中,尽可能让数据不为空。

3.2列描述comment

没有实际含义,专门用来描述字段,会根据表创建语句保存。用来给程序员(数据库管理员)来进行了解的。

 

3.3默认值

某一种数据经常性出现某个具体的值,可以在一开始就指定。在需要的真是数据时,用户可以选择性的使用默认值。

 

 

 

 

 

 

 

0 0
原创粉丝点击