本文已参与「新人创作礼」活动,一起开启掘金创作之路。
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,'男');