Mysql Example
table example
1 |
CREATE TABLE `table_name` ( |
-
每张表都有主键 id
-
所有 int 确定非负数都使用 unsigned 避免浪费范围
-
varchar(255) 不是 256, 方便 InnoDB 建索引, 少申请一个字节
-
linux 时间戳使用 int(11) unsigned, 因为已经达到目前 linux 标准范围, 超出部分现有大部分语言时间戳函数无法识别
-
习惯使用 created_time, updated_time 字段, 默认是让 mysql 自动记录时间
-
索引命名例子, uni_xxx 表示 unique key, idx_xxx 表示普通索引, 默认 btree, 非 hash 索引不用写上定义
-
tinyint 一个字节 smallint 两个字节 MEDIUMINT 三个字节, 状态字段一般 tinyint unsigned (0-255)
-
非特殊用途, 一律 NOT NULL, varchar default ‘’ 而不是 NULL, ‘’不占用字节, NULL 占用字节
-
使用下划线命名, 而不是驼峰, mysql 内部默认大小写不敏感
关于 int 类型
- 定义
类型 | 存储 | 容量 | 范围 | unsigned | 展示位 |
---|---|---|---|---|---|
tinyint | 1 Byte | 2^8 | -128 ~ 127 | 0 ~ 255 | 3 |
smallint | 2 Byte | 2^16 | - | 0 ~ 65535 | 5 |
mediumint | 3 Byte | 2^24 | - | 0 ~ 16,777,215 (1600 万+) | 8 |
int | 4 Byte | 2^32 | -2147483648 ~ 2147483647 | 0 ~ 4,294,967,295 (42 亿+) | 10 |
bigint | 8 Byte | 2^64 | - | 0 ~ 18446744073709551615 | 20 |
-
int(M) M 为展示位数, 与实际存储容量无关, 对应类型存储的最大值和最小值是固定的
-
因为符号位存在, 一般 int(11) 和 unsigned int(10)
-
不设置 fillzero 补零, unsigned 的 int(11) 与 int(10) 无区别, 一般设置为 int(11) 预留可转换符号