MySQL 5.7修改DOUBLE列精度从(8,2)到(12,2)是否即时生效?
MySQL 5.7 中修改DOUBLE精度的生效方式
在MySQL 5.7里,把DOUBLE类型列从double(8,2)修改为double(12,2),变更会即时生效,完全不需要遍历处理所有行数据。
原因很简单:MySQL里的DOUBLE(M,D)只是显示和插入时的约束规则,底层存储的始终是标准的8字节双精度浮点数,和M(总位数)、D(小数位数)的取值无关。不管你把M设为8还是12,实际存储的二进制数据没有任何变化。
具体来说:
- 这个ALTER操作本质上只修改了表的元数据(比如information_schema.COLUMNS里的列定义信息),不会触碰实际的行存储数据。
- 执行
ALTER TABLE your_table MODIFY COLUMN your_col double(12,2);时,InnoDB会以Online DDL的方式快速完成,几乎不会锁表或产生性能开销(除非表本身有其他锁冲突)。
需要注意的是,如果是反过来缩小精度(比如从double(12,2)改double(8,2)),MySQL会检查现有数据是否符合新的精度规则,可能需要遍历行数据做验证,但扩大精度的场景完全没有这个必要。
内容的提问来源于stack exchange,提问作者Gammel
相关产品推荐
相关产品推荐

