①简单原则
更小通常更好、简单就好、尽量避免NULL
②数据类型选择
— 整型:尽量使用
unsigned(不允许负值),且选择合适大小的整型数据,表如下:
数据类型 |
大小 |
M |
范围(有符号) |
范围(无符号) |
用途 |
tinyint [(M)] [UNSIGNED] [ZEROFILL] |
1字节 |
4 |
-128~127 (-27~27-1) |
0 ~ 255 (0 ~ 28-1) |
非常小整数值 |
smallint [(M)] [UNSIGNED] [ZEROFILL] |
2字节 |
6 |
-32768~32767(-215 ~ 215-1) |
0 ~ 65535 (0 ~ 216-1) |
较小整数 |
mediumint [(M)] [UNSIGNED] [ZEROFILL] |
3字节 |
9 |
-8388608 ~ 8388607 (-223 ~ 223-1) |
0 ~ 16777215 (0 ~ 224-1) |
中等大小整数 |
int [(M)] [UNSIGNED] [ZEROFILL] |
4字节 |
11 |
-2147483648 ~ 2147483647(-231 ~ 231-1) |
0 ~ 4294967295 (0 ~ 232-1) |
标准整数 |
bigint [(M)] [UNSIGNED] [ZEROFILL] |
8字节 |
20 |
-9223372036854775808 ~9223372036854775807 (-263 ~ 263-1) |
0 ~ 18446744073709551615 (0 ~ 264-1) |
较大整数 |
— 实数:带小数部分数字
如:
float(4个字节、11个数字)、
double(8个字节,20个数字)、
decimal(在mysql5.0以上允许65个数字)
注:如计算
精确数字,使用
decimal(像财务)
— 字符串类型:VARCHAR和CHAR
一个字节记录长度),
推荐使用,但update时可能使行变得比原来长
CHAR:定长,对于md5数据合适存储(
较短数据且固定长度)
注:慷慨是不明智,
需要多少分配多少,如手机号11位则分配 11
大的字符串数据
缺点:Innodb中当数据行中有以上两个会使用
磁盘临时表,
解决办法是避免使用该两种类型
— 枚举:ENUM把不重复字符串存储成一个预定义集合,例子如下:
注:枚举常量尽量避免常量
— 日期和时间类型:
TIMESTAMP:只能表示
1970-2038年, 时间 依赖时区(如中国需要设置为中国时区),
插入时可自动
更新
注:TIMESTAMP效率比DATETIME高
— 位数据类型:含BIT、SET(具体不做介绍)
— 选择标识符:
auto_increment
③MySQL设计中陷阱:
— 太多的列
— 太多的关联:每个关联操作最多 61张表,根据经验,若需要执行快并发好,单个查询最好在
12个表内关联
— 注意过度使用枚举
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.e1idc.net