MYSQL使用手记一

Posted supingemail

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MYSQL使用手记一相关的知识,希望对你有一定的参考价值。

好记忆不如烂笔头,能记下点东西,就记下点,有时间拿出来看看,也会发觉不一样的感受。

0、不要受经典三范式的约束,在设计表结构时候,不必遵守三范式,三范式是一种很理性的状态,只存在于理论中,业务中很难真正满足。

1.mysql中的整型类型有:TINYINT、SMALLINT、MEDIUMINT、INT 和 BIGINT。
    TINYINT占1个字节;SMALLINT占2个字节;MEDIUMINT占3个字节;INT占4个字节;TBIGINT占8个字节;
    
2、用自增整型做主键,一律使用 BIGINT,而不是 INT。
    INT 在signed 修饰时候,最大值是21亿多, 在unsigned修饰时候,最大值是42亿多,很容易达到上限,达到上限之后,再次自增插入,MySQL 数据库会报重复错误,后期表结构调整代价巨大;
3、MySQL 8.0 版本前,使用 auto_increment 自增值并不持久化,可能会有回溯现象;

4、在海量互联网业务的设计标准中,并不推荐用 DECIMAL 类型,而是更推荐将 DECIMAL 转化为 整型bigint类型用元角分的分来存储。·
类型 DECIMAL 是通过二进制实现的一种编码方式,计算效率远不如整型来的高效。

5、不推荐使用整型类型的属性 Unsigned,若非要使用,参数 sql_mode 务必额外添加上选项 NO_UNSIGNED_SUBTRACTION;

6、不要再使用浮点类型 Float、Double,MySQL 后续版本将不再支持上述两种类型;

7、MySQL 数据库的字符串类型有 CHAR、VARCHAR、BINARY、BLOB、TEXT、LONGTEXT、ENUM、SET。

8、CHAR(N) 用来保存固定长度的字符,N 的范围是 0 ~ 255,请牢记,N 表示的是字符,而不是字节。VARCHAR(N) 用来保存变长字符,N 的范围为 0 ~ 65536, N 表示字符。

9、字符串的字符集一定要设置成 UTF8MB4,并且是作为MySQL的默认字符类型。

10、使用 TIMESTAMP 必须显式地设置时区,不要使用默认系统时区,否则存在性能问题,推荐在配置文件中设置参数 time_zone = '+08:00';
推荐日期类型使用 DATETIME,而不是 TIMESTAMP 和 INT 类型;。

11、核心业务尽量不要使用bigint这样的整型来做为主键,主要原因有:
    自增存在回溯问题;
    自增值在服务器端产生,存在并发性能问题;
    自增值做主键,只能在当前实例中保证唯一,不能保证全局唯一;
    公开数据值,容易引发安全问题,例如知道地址http://www.example.com/User/10/,很容猜出 User 有 11、12 依次类推的值,容易引发数据泄露;
    MGR(MySQL Group Replication) 可能引起的性能问题;
    分布式架构设计问题。

12、核心业务主键,还是要有具体的含义,以此来满足易读易理解有意义的业务含义。

更多精彩,请移步:码出精彩(codingba)

以上是关于MYSQL使用手记一的主要内容,如果未能解决你的问题,请参考以下文章

MYSQL使用手记一

MYSQL使用手记一

学亮IT手记mysql创建/查看/切换数据库

MySQL手记20 -- MySQL Group Replication(MGR组复制)

手记!CentOS7.6安装MySQL5.7.31

mysql随手记-innodb幻读