您的位置:首页 > 数据库 > MySQL

02、mysql数据类型和列属性

2017-02-17 20:53 489 查看
Mysql数据类型和列属性
 

一、    回顾

数据库基础知识:关系型数据库(运行在磁盘)和非关系数据库(运行在内存中)

关系型数据库:

1、 建立在关系模型上的数据库

2、 数据结构:二维表,比较浪费空间

3、 操作数据的指令集合:SQ(DDL、DML[DQL]和DCL)

4、 完整性的约束,表内和表之间(实体)

 

二、数据类型(列类型)

所谓的数据类型,就是对大数据进行统一的分类,从系统的角度出发是为了能够私用统一的方式进行管理,这样我们就能更好的利用有限空间

 

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

 

1、 时间日期格式

1) DataTime :时间日期,格式是YYYY-mm-dd HH:ii:ss;表示的时间是从1000年到9999年,有零值

2) Data:日期,就是DateTime中的Date部分。

3) Time:时间(段),指定的某个区间之间

4) TimeStamp:时间戳,并不是时间戳,知识从1970年开始的YYYY-mm-dd HH:ii:ss;格式与DateTime完全一致。

5) Year:年份,由两种形式,Year(2)和Year(4):1901-2156

需要注意的是:

l  当我们以两位数的形式来输入年份时,输入1-69时,是2001-2069

                                  输入70-99时,是1970-1999

l  TimeStamp字段,只要当前所在的数据别跟新,该字段一定会被再一次更新成为当前的时间。而且,该类型的字段是不可以为空的,这一点是默认的。

l  插入数据时,时间time可以是负数,而且可以是很大的负数,year可以使用两位数来输入,也可以用四位数来输入。

2、 字符串类型:

在sql中,将字符串类型分为了6类:char , varchar, text, blog, enum, set。

1) 常规字符串,char,磁盘(二维表)在定义结构的时候,就已经确定了最终数据的长度,这种类型的数据是不能改变长度的。

A、 Char(L):length代表的是可以存储的长度,单位必须是字符。最大的长度值是255个字符。这个被称为定长字符串

B、 Varchar 可变长度的字符串,在分配空间的时候,按照最大的空间来分配:但是实际上最终用了多少,是根据具体的数据来确定的。

使用方式: Varchar(L) : L 代表字符长度,理论长度是65536个字节。

3、 文本数据类型(字符串类型的一种)

如果数据量特别大,通常说超过255个文字就会使用文本字符串

文本字符串根据存储的数据的格式进行分类:text和blog

A、 Text:存储文字(二进制数据 其实都是存储路径),文本字符串不占用记录长度,他是额外存储的,但是text文本字符串也是属于记录的一部分,一定需要占据记录中的部分长度:10个字节(保存数据的地址以及长度)。

B、 Blog:存储二进制数据,我们通常不使用这个

4、 枚举字符串(字符串类型的一种)

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

枚举的使用方式:

A、 定义: enum(可能出现的元素列表),这样的数据是单选的

B、 使用:存储数据,只能存储上面定义好的数据。

C、 好处:枚举类型的字符串比其他类型的,数据要节省空间得多。

l  那么为什么枚举类型会节省空间呢?

                答案是这样子的,枚举类型字段中存储的数据*是数值,验证方式就是将数据取出来+0,就可以判断存储的数据到底是字符串还是数值,如果字符串最终结果永远是零,否则就是其他的值。

D、弊端:读取的效率相比于其他了类型的数据,要低。

E、 存储的规律,通过查找枚举存储的数值类型,我们很巧合的找到了该种数值的存储规律,即按照我们书写的顺序保存顺序号码。

F、 原理:枚举在进行数据规范的时候,系统个会自动建立一个数字与枚举元素的对应关系(关系放到日志文件中),我们在插入数据的时候,系统自动将字符串转换成对应的数字存储,然后在提取的时候,系统自动将数值转换成对应的字符串进行显示。

5、 集合字符串(字符串类型的一种)

集合跟枚举很类似:实际上存储的数据就是数值,而不是字符串(集合是多选的)

集合的使用方式:

A、 定义:Set(元素列表)。

B、 使用:可以使用元素列表中的元素(多个),使用逗号分隔。

C、 特点:集合中的元素顺序是没有关系的,因为系统会自动去匹配元素的内容。

D、好处:集合的强大在于能够规范数据和节省空间。我们的程序在现代社会,一般首要考虑的是程序运行的效率。我们和少用集合类型的表。

 

 

三、Mysql记录长度

Mysql中规定,任何一条记录都不能超过65535个字节,varchar永远达不到理论值。

1、  Varchar的实际存储长度能达到多少呢?

     在utf8编码中,最多可以存储21844字符。

     在gbk编码中,最多存储32766个字符。

2、 Text文本字符串,是额外存储的,但是要占用10个字节的长路,用来存储文本的路径和文本长度。

 

四、列属性

列属性:真正约束字段的是数据类型,但是数据类型的约束很单一。需要有一些额外的约束,来更加保证数据的合法性,所以就有了数据库的列属性。

列属性的类型:

   NULL、NOT NULL,default,primarykey,unique key,auto_increment,comment

1、 空属性,有两个值null/not null。虽然默认的数据基本上都是为空,但是我们再开发的时候,要尽可能的保证数据的不为空,因为空数据是没有任何意义的,第二个是空数据不能参与任何的运算。在数据库中,任何值与null进行运算所得的结果都是null。

2、 列描述,comment,描述,是没有实际含义,是专门用来描述字段,会根据创建语句保存:用来给数据库管理员进行了解的。

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

默认值的关键字:default

4、 主键:primary key,主要的键,一张表中只能有一个字段可以使用对应的键,用来唯一的约束该字段里面的数据不能重复。这种键我们将之称为主键。一张表中最多只能有一个主键。

1) 增加主键

l  方案一:在创建字段的时候,直接在字段之后,跟primary key关键字,这种方式,优点是创建主键的时候是非常直接的,但是缺点就是只能选择一个字段作为主键。

l  方案二:在创建表的时候,在所有的字段之后,使用primary key(主键字段列表)来创建主键,如果有多个字段作为主键,那么这个主键就称为复合主键。符合主键至少包含两个字段以上。

值得注意的是: 例如:一张表中的学号和姓名共同组成主键的话,那位姓名和学号可以有任意一个字段的数据重复,但是不能两个字段的数据都是重复的。这一点尤为重要。

l  方案三:当表已经创建好之后,我们可以追加主键,可以通过修改字段的属性,也可以直接追加主键。

Alter table 表名 add primary key(字段列表);

前提:这种方式添加主键的话,就必须保证我们所要添加为主键的字段本身时独立的(不重复)

 

2) 主键约束

主键中对应的字段不允许重复,一旦重复,数据的增删改操作会失败。

3) 更新主键&删除主键

我们是没有办法直接去更新主键的,,主键只有在删除主键之后去增加

Alter table 表名 drop primary key;

因为一张表只有一个主键,所以,我们删除主键的时候,就会删除主键里面包含的所有字段。注意:这个不是说把包含的内容全部删除,而是指删除该字段的主键设定。

4) 主键的分类

在我们实际创建表格的时候,很少使用真实的业务数据作为主键(业务主键:如学号,课程号,大部分的时候使用的是逻辑性的字段(字段没有业务含义,值是什么都是没有关系的)),我们就将这种主键称为逻辑主键
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mysql 数据库