修改表的默认字符集不会改表各个字段的字符集
- Content:很多初学者会将ALTER TABLE tbl_name [DEFAULT] CHARACTER SET ‘UTF8’误认为会修改所有字段的字符集,但实际上它只会影响后续新增的字段不会改表已有字段的字符集。如果想修改整张表所有字段的字符集建议使用ALTER TABLE tbl_name CONVERT TO CHARACTER SET charset_name;
- Case:
ALTER TABLE tbl_name CONVERT TO CHARACTER SET charset_name;
同一张表的多条ALTER请求建议合为一条
- Content:每次表结构变更对线上服务都会产生影响,即使是能够通过在线工具进行调整也请尽量通过合并ALTER请求的试减少操作次数。
- Case:
ALTER TABLE tbl ADD COLUMN col int, ADD INDEX idx_col (`col`);
删除列为高危操作,操作前请注意检查业务逻辑是否还有依赖
- Content:如业务逻辑依赖未完全消除,列被删除后可能导致数据无法写入或无法查询到已删除列数据导致程序异常的情况。这种情况下即使通过备份数据回滚也会丢失用户请求写入的数据。
- Case:
ALTER TABLE tbl DROP COLUMN col;
删除主键和外键为高危操作,操作前请与DBA确认影响
- Content:主键和外键为关系型数据库中两种重要约束,删除已有约束会打破已有业务逻辑,操作前请业务开发与DBA确认影响,三思而行。
- Case:
ALTER TABLE tbl DROP PRIMARY KEY;