数据表是数据库中的基本对象元素,以记录(行)和字段(列)组成的二维结构用于存储数据。数据表由表结构和表内容两部分组成,先建立表结构,然后才能输入数据。
数据表结构设计主要包括字段名称、字段类型和字段属性的设置。 通常情况下,同一个数据库中可以有多个数据表,但表名必须是唯一的,表中每一条记录描述了一个相关信息的集合,每一个字段必须为唯一的,每个字段都需要指定数据类型。
字段类型:
1.数字类型
数据列类型 |
存储空间 |
说明 |
取值范围 |
TINYINT |
1字节 |
非常小的整数 |
带符号值:-128~127 无符号值:0~255 |
SMALLINT |
2字节 |
较小的整数 |
带符号值:-32768~32767 无符号值:0~65535 |
MEDIUMINT |
3字节 |
中等大小的整数 |
带符号值:-8388608~8388607 无符号值:0~16777215 |
INT |
4字节 |
标准整数 |
带符号值:-2147483648~2147483647 无符号值:0~4294967295 |
BIGINT |
8字节 |
大整数 |
带符号值:-263~263-1 无符号值:0~264-1 |
FLOAT |
4或8字节 |
单精度浮点数 |
最小非零值:+- 1.175494351E-38 最大非零值:+- 3.402823466E+38 |
DOUBLE |
8字节 |
双精度浮点数 |
最小非零值:+- 2.225073E-308 最大非零值:+- 1.797693E+308 |
DECIMAL |
自定义 |
以字符串形式表示的浮点数 |
取决于存储单元字节数 |
整型注意事项: INT(3)、SMALLINT(3)等整型后面的数字不会影响数值的存储范围,只会影响显示 整型后面的数字只有配合零填充的时候才有实际意义。 整型后面的数字可以省略
浮点型注意事项: 浮点型后面的数字会将存入的数字四舍五入,例如:把一个1.234存入FLOAT(6,1)数据列中,结果是1.2,6代表显示长度,1代表小数位长度,会四舍五入。
2.字符串类型
数据列类型 |
存储空间 |
说明 |
取值范围 |
CHAR[(M)] |
M字节 |
定长字符串 |
M字节 |
VARCHAR[(M)] |
L+1字节 |
可变字符串 |
M字节 |
TINYBLOB,TINYTEXT |
L+1字节 |
非常小的BLOB(二进制大对象)和文本串 |
28-1字节 |
BLOB,TEXT |
L+2字节 |
小BLOB和文本串 |
216-1字节 |
MEDIUMBLOB, MEDIUMTEXT |
L+3字节 |
中等的BLOB和文本串 |
224-1字节 |
LONGBLOB, LONGTEXT |
L+4字节 |
大BLOB和文本串 |
232-1字节 |
ENUM(‘value1’,’value2’…) |
1或2字节 |
枚举:可赋予某个枚举成员 |
65535个成员 |
SET(‘value1’,‘value2’…) |
1,2,3,4或8字节 |
集合:可赋予多个集合成员 |
64个成员 |
字符串类型注意事项:
CHAR和VARCHAR类型的长度范围都在0~255之间
在使用CHAR和VARCHAR类型时,当我们传入的实际的值的长度大于指定的长度,字符串会被截取至指定长度
在使用CHAR类型时,如果我们传入的值的长度小于指定长度,实际长度会使用空格补至指定长度
在使用VARCHAR类型时,如果我们传入的值的长度小于指定长度,实际长度即为传入字符串的长度,不会使用空格填补
CHAR要比VARCHAR效率更高,当占用空间较大
BLOB和TEXT类型是可以存放任意大数据的数据类型
BLOB区分大小写,TEXT不区分大小写
ENUM和SET类型是特殊的的串类型,其列值必须从固定的串集中选择
ENUM只能选择其中一个值,SET可以选择多个值
3.日期和时间类型
数据列类型 |
存储空间 |
说明 |
取值范围 |
DATE |
3 字节 |
“YYYY-MM-DD”格式表示的日期值 |
1000-01-01~9999-12-31 |
TIME |
3 字节 |
“hh:mm:ss”格式表示的时间值 |
-838:59:59-838:59:59 |
DATETIME |
8 字节 |
“YYYY-MM-DD hh:mm:ss”格式 |
1000-01-01 00:00:00~9999-12-31 |
TIMESTAMP |
4 字节 |
“YYYYMMDDhhmmss”格式表示的时间戳 |
19700101000000-2037年的某个时刻 |
YEAR |
1 字节 |
“YYYY”格式的年份值 |
1901~2155 |
日期类型注意事项:
存储日期时,我们可以使用整型 int 来进行存储时间戳,这样做便于我们进行日期的计算
NULL值注意事项:
NULL意味着“没有值”或“未知值”
可以测试某个值是否为NULL
不能对NULL值进行算术计算
对NULL值进行算术运算,其结果还是NULL
0或NULL都意味着假,其余值都意味着真
和PHP类似,在MySQL的表达式中,如果某个数据值的类型与上下文所要求的类型不相符,MySQL则会根据将要进行的操作自动地对数据值进行类型转换。
字段属性
UNSIGNED
只能用于设置数值类型,不允许出现负数
最大存储长度会增加一倍
ZEROFILL
只能用于设置数值类型,在数值之前会自动用0补齐不足的位数
AUTO_INCREMENT
用于设置字段的自动增长属性,每增加一条记录,该字段的值会自动加1
NULL和NOT NULL
默认为NULL,即插入值时没有在此字段插入值,默认为NULL值,如果指定了NOT NULL,则必须在插入值时在此字段填入值
DEFAULT
可以通过此属性来指定一个默认值,如果没有在此列添加值,那么默认添加此值