涉及到列名修改时,不要使用Navicat结构同步工具

  • 本地环境的表结构如下
id phone invite_code
1 123-456-789 ABC123
2 987-654-321 DEF456
3 555-555-555 GHI789
  • 生产环境的表结构如下
id phone user_id
1 123-456-789 ABC123
2 987-654-321 DEF456
3 555-555-555 GHI789
  • 若此时使用Navicat提供的结构同步工具,实际上执行的命令会是将原有的列删除,然后再新增,会导致该列的内容完全丢失

    1
    2
    3
    4
    5
    6
    7
    ALTER TABLE `user_info` DROP COLUMN `invite_code`;

    ALTER TABLE `user_info` DROP INDEX `idx_invite_code`;

    ALTER TABLE `user_info` ADD COLUMN `user_id` varchar(255) AFTER `phone`;

    ALTER TABLE `user_info` ADD INDEX `idx_invite_code`(`user_id` ASC) USING BTREE;
  • 若仅修改字段名,建议使用RENAME命令

    1
    2
    ALTER TABLE user_info 
    RENAME COLUMN invite_code TO user_id
  • 若还涉及到字段定义修改,建议使用CHANGE COLUMN命令
    1
    2
    ALTER TABLE user_info
    CHANGE COLUMN invite_code user_id VARCHAR(50)