吐槽
创建一张合理的表是程序员的基本功
很多程序员都是修修 bug
很少去增加表去设计表
因为技术大佬都把项目搭建设计好了
码农们只是去修修补补
下面来复习下基本知识
bigint
BIGINT[(M)] [UNSIGNED] [ZEROFILL] M 默认为 20
大整数。带符号的范围是 - 9223372036854775808 到 9223372036854775807。无符号的范围是 0 到 18446744073709551615。
unsigned
属性就是将数字类型无符号化 INT 或 INTEGER 4 字节
范围(有符号)(-2 147 483 648,2 147 483 647) 范围(无符号)用途 (0,4 294 967 295) 大整数值
看起来这是一个不错的属性选项,特别是对于主键是自增长的类型,因为一般来说,用户都希望主键是非负数。然而在实际使用中,UNSIGNED 可能会带来一些负面的影响 【去掉了负数,正数 * 2】
AUTO_INCREMENT
- 具有 auto_increment 属性的数据列应该是一个正数序列,如果把该数据列声明为 UNSIGNED,这样序列的编号个数可增加一倍。
2.auto_increment 数据列必须有唯一索引,以避免序号重复;必须具备 NOT NULL 属性
AUTO_INCREMENT=8:选项来指定一个自增的初始值 8
ENGINE=InnoDB
它提供了事务控制能力功能,它确保一组命令全部执行成功,或者当任何一个命令出现错误时所有命令的结果都被回退,可以想像在电子银行中事务控制能力是非常重要的。支持 COMMIT、ROLLBACK 和其他事务特性。最新版本的 Mysql 已经计划移除对 BDB 的支持,转而全力发展 InnoDB。
CHARSET=utf8mb4
utf-8 编码可能 2 个字节、3 个字节、4 个字节的字符,但是 MySQL 的 utf8 编码只支持 3 字节的数据,而移动端的表情数据是 4 个字节的字符。如果直接往采用 utf-8 编码的数据库中插入表情数据,Java 程序中将报 SQL 异常:
可以对 4 字节的字符进行编码存储,然后取出来的时候,再进行解码。但是这样做会使得任何使用该字符的地方都要进行编码与解码。
utf8mb4 编码是 utf8 编码的超集,兼容 utf8,并且能存储 4 字节的表情字符。
采用 utf8mb4 编码的好处是:存储与获取数据的时候,不用再考虑表情字符的编码与解码问题。
PRIMARY KEY (id
)【主键聚集索引】
primary key 有两个作用,一是约束作用(constraint),用来规范一个存储主键和唯一性,但同时也在此 key 上建立了一个主键索引;
PRIMARY KEY 约束唯一标识数据库表中的每条记录。
主键必须包含唯一的值。
主键列不能包含 NULL 值。
每个表都应该有一个主键,并且每个表只能有一个主键。
UNIQUE KEY uk_namevalue
(name
,value
)
unique key 也有两个作用,一是约束作用(constraint),规范数据的唯一性,但同时也在这个 key 上建立了一个唯一索引;
UNIQUE 约束:唯一标识数据库表中的每条记录。
UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证。
每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束)
UNIQUE 可以有多个 null 值重复
KEY idx_biz_id
(biz_id
), 【普通索引】
它的目的就是建立索引
和程序汪深度沟通可以去知识星球, 建议先加微信通知我下后面在进去
程序汪往期精彩文章包含答案
程序汪最近整理的 BAT 大小厂面试题 (面试题目录推荐)
继续帮公司面试 2 万的 java 程序员,一轮电话面试很基础
程序汪粉丝 2020 春招 java 后端经验分享小米 1 万 8、国家电网
100 多个免费 API 接口分享 调用完全不限次数,以后总用得着
1 | 给个[在看],是对程序汪最大的支持 |