0%

原文地址 https://mp.weixin.qq.com/s/1-glF85L2PYwJz4LOEHGxQ

吐槽

创建一张合理的表是程序员的基本功

很多程序员都是修修 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

  1. 具有 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 大小厂面试题 (面试题目录推荐)

目录:我把精华文章都整理出来了

程序员新人刚进公司很懵逼,程序汪给 5 个建议

6 个接私活的网站,你有技术就有钱!

继续帮公司面试 2 万的 java 程序员,一轮电话面试很基础

程序汪粉丝 2020 春招 java 后端经验分享小米 1 万 8、国家电网

100 多个免费 API 接口分享 调用完全不限次数,以后总用得着

通过一个 demo 学会互联网 API 接口的使用

程序汪帮公司面试 3 年 1 万 8 的 Java 程序员

程序汪本科应届粉丝 22K 拿下字节跳动和顺丰 offer

本科粉丝杭州 12K 拿下互联网医疗和电商公司 offer

1
给个[在看],是对程序汪最大的支持