mysql修改字段长度是否锁表

Varchar对于小于等于255字节以内的长度可以使用一个byte 存储。大于255个字节的长度则需要使用2个byte存储
1, 如果是255长度之内的扩展,或者255之外的扩展,则不锁表,采用in-place方式执行
2, 如果从varchar长度从(0,255) 到 255+, 则会锁表,采用copy方式执行;
3, 如果字段的缩小会锁表,采用copy方式执行;
4,    (1) 当字段字符集为utf8时,字符个数对应的变更区间范围为1-85,86+两个区间;
    (2) 当字段字符集为utf8mb4时,字符个数对应的变更区间范围为1-63,64+两个区间;
5, 扩充的字段是否是二级索引
    长度在对应范围内,会建立全宽索引;超出长度的则会转化为前缀索引;(innodb_large_prefix OFF, 长度<=767)
    分为如下几种情况
    a, 当类型为utf8,innodb_large_prefix值为ON时,变更区间在86-1024区间中,字段宽度扩大变更会很快完成,但是在1025+的时候,
    字段宽度扩大会变慢,变更完成后二级索引会变为前缀索引,索引字段前1024位
    b, 当类型为utf8,innodb_large_prefix值为OFF时,变更区间在86-255区间中,字段宽度扩大变更会很快完成,但是在256+的时候,
    字段宽度扩大会变慢,变更完成后二级索引会变为前缀索引,索引字段前256位
    c, 当类型为utf8mb4时,innodb_large_prefix值为ON时,变更区间在64-768区间中,字段宽度扩大变更会很快完成,但是在769+的时候,
    字段宽度扩大会变慢,变更完成后二级索引会变为前缀索引,索引字段前768位
    d, 当类型为utf8mb4时,innodb_large_prefix值为OFF时,变更区间在64-191区间中,字段宽度扩大变更会很快完成,但是在192+的时候,
    字段宽度扩大会变慢,变更完成后二级索引会变为前缀索引,索引字段前768位
注,以上讨论的是使用mysql原生支持的DDL情况,如果使用PT则不会进行锁表;

你可能感兴趣的:(mysql,java,数据库)