数据库知识点五(持续更新)

148 阅读3分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

2、数值列类型

(1)所有数值列类型的类型名以及其说明和所占的字节数见下表:

类型名说明类型名说明
TINYINT非常小的整数                                BIGINT大整数
SMALLINT较小整数FLOAT单精度浮点数
MEDIUMINT中等大小的整数DOUBLE双精度浮点数
INT标准整数DECIMAL一个串的浮点数(多用于银行的数值)

 

类型说明存储需求
TINYINT[(M)]1字节
SMALLINT[(M)]2字节
MEDIUMINT[(M)]3字节
INT[(M)]4字节
BIGINT[(M)]8字节
FLOAT[(M,D)],FLOAT(4)4字节
DOUBLE[(M,D)],FLOAT(8)8字节
DECIMAL(M,D)M字节

M是从1到255的值,它表示列中值的字符数

 

类型说明取值范围(MySQL<3.23)取值范围(MySQL>=3.23)
DECIMAL(4,1)-9.9到99.9-999.9到9999.9
DECIMAL(5,1)-99.9到999.9-9999.9到99999.9
DECIMAL(6,1)-999.9到99999.9-99999.9到999999.9
DECIMAL(6,2)-99.99到999.99-9999.99到99999.99
DECIMAL(6,3)-9.999到99.999-999.999到9999.999

对于每种浮点型,可指定一个最大的显示尺寸M和小数位D,M和D对于DECIMAL是必须的

 

(2)数值列的完整性约束

a、auto_increment

  自动标识列,一个表中最多能有一个此属性的列。对于想使用此属性的列应该定义为not null,并定义为primary key或定义为unique键。

create table student(id int auto_increment not null primary key)

 

b、unsigned

  无符号,此属性禁用负值,将数值的范围从0开始。

create table student(num tinyint,num2 tinyint unsigned)

 

c、null和not null

  默认为null,即插入值时没有在此字段插入值时自动填null,如果指定了not null,则必须在插入值时在此字段添入值,不允许插入null值。

 

d、default

  可以通过此属性来指定一个缺省值,即如果没有在此列添加值,那么默认添加default后指定值。

 

e、zerofill

  前导零填充数值类型值以达到列的显示宽度。

3、字符串列类型

 所有字符串列类型及其说明和所占字节数见下表:

类型名说明
CHAR定长字符串
VARCHAR可变长字符串
TINYBLOB非常小的BLOB(二进制大对象)
BLOB小BLOB
MEDIUMBLOB中等的BLOB
LONGBLOB大BLOB
TINYTEXT非常小的文本串
TEXT小文本串
MEDIUMTEXT中等文本串
LONGTEXT大文本串
ENUM枚举:列可赋予某个枚举成员
SET集合:列可赋予多个集合成员

(1)CHAR和VARCHAR类型

  CHAR类型和VARCHAR类型长度范围都是0~255之间的大小。他们之间的差异在于Mysql处理存储的方式:

  CHAR把这个大小视为值的准确大小(如果值的长度不够长,则用空格填补比较短的值)。

  VARCHAR类型把它视为最大值并且只使用了存储字符串实际上需要的字节数(增加一个额外的字节记录长度)。因而较短的值当被插入一个语句为VARCHAR类型的字段时,将不会用空格填补(然而,较长的值仍然被截短)。

 

(2)BLOB和TEXT类型

   BLOB是二进制大对象,如果想存储二进制数,BLOB将是最佳选择,而TEXT与之相同,只是BLOB按照二进制编码排序(区分大小写),TEXT按照字符文本模式排序(不区分大小写)。

 

(3)ENUM和SET类型

  它们是特殊的串类型,其列值必须从固定的串集中选择,二者差别为前者必须是只能选择其中的一个值,而后者可以多选。(不推荐使用)

 

枚举的例子:

alter table test2 add sex enum('男','女');
insert into test2 values(2,70,'男');