【mysql 关于数字类型的几个坑】

mysql 关于数字类型的几个坑

01—浮点类型和高精度类型

MySQL 之前的版本中存在浮点类型 Float 和 Double,但这些类型因为不是高精度,也不是 SQL 标准的类型,所以在真实的生产环境中不推荐使用,否则在计算时,由于精度类型问题,会导致最终的计算结果出错。

更重要的是,从 MySQL 8.0.17 版本开始,当创建表用到类型 Float 或 Double 时,会抛出下面的警告:MySQL 提醒用户不该用上述浮点类型,甚至提醒将在之后版本中废弃浮点类型。

Specifying number of digits for floating point data 
types is deprecated and will be removed in a future 
release

数字类型如果要求高精度,则可以使用Decimal类型,可以指定精度和标度(小数点后多少位),避免执行计算时出现一些意想不到的错误。

02—整型做主键推荐用bigint

整形类型一般会 用于表的主键,结合auto_increment实现自增ID的功能,但是如果业务场景会出现海量数据,则最好使用bigint类型,因为int类型最大范围在42亿的级别,如果业务场景每天会产生海量数据,那么达到上限范围就很容易了,所以推荐一开始就用Bigint,数值范围会大很多,虽然会比int多占4个字节的空间,否则一旦达到上限才去修改数据表的结构,由于已经有海量数据,那将非常痛苦(需要做迁移)。

03—自增ID可能不会持久化

假设数据表已经插入3条数据,如果我删除掉这其中任意一条或者多条数据,下一条数据的ID也应该是4,这在我们平常开发也见多了,觉得这应该没啥问题,然而当我们讲数据库进行了重启,这时候再去插入数据,ID就不是4了,自增值会发生回溯,比如仍然是3(取决于前面删掉了多少条数据)。这个问题在mysql8.0版本已经得到了解决,即每张表的自增值会持久化,重启数据库后不会发生回溯

04—总结

本篇分享了几个mysql可能会遇到的坑,在平常测试场景或者非极端情况下可能遇不到,但是仍然需要记忆或者形成一个习惯,避免有时候因为这些坑出现bug而需要花费大量时间进行排查

文章转载自CoderShare

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值