mysql保留元数据的情况下修改表结构

mysql保留元数据的情况下修改表结构

环境介绍: 假设 有数据库AA 内部有表A,B
A.id 是 主键 int 自增型
B.b_id 是外键 关联的 A.id

问题:目前有多个数据库AA的DB服务器,但是内部的数据是不同的,想要合并这几个数据的数据,同事修改掉 以前的 int 自增型主键 为 varchar(255)的字符型。不能丢失元数据

需求:
1.在保证数据完整的前提下,将每个表的int自增主键 修改为 varchar(255)
2.按照 保证唯一性的算法 update 所有表的 主键, 从表 外键相应改变

解决步骤:
1.修改字段名,类型,1.通过手动 修改sql文件实现(目前只需要写sed 命令修改
`id` int(11) NOT NULL AUTO_INCREMENT 为 “guid”  varchar(255) not null ;
PRIMARY KEY (`id`) 改为 PRIMARY KEY (`guid`);
对应的其他表的 外键类型 也要改为 varchar(255);
FOREIGN KEY (`group_id`) REFERENCES `auth_group` ( `id`) 改为 guid

2.update 数据 从表自动更新,通过修改sql文件中的外键约束设置update cascade 设置为级联即可。(目前只需要sed 命令修改所有的 update on action 改为 update cascade )


资料:
外键约束:
 foreign key options[restrict(限制),cascade(级联),set null, no action]
外键约束对子表的含义:
     如果在父表中找不到候选键,则不允许在子表上进行insert/update
外键约束对父表的含义:
     在父表上进行update/delete以更新或删除在子表中有一条或多条对应匹配行的候选键时,父表的行为取决于:在定义子表的外键时指定的on update/on delete子句,  InnoDB支持5种方式, 分列如下 :
cascade方式
     在父表上update/delete记录时,同步update/delete掉子表的匹配记录
On delete cascade从 mysql3.23.50开始可用; on update cascade从mysql4.0.8开始可用
set null方式
     在父表上update/delete记录时,将子表上匹配记录的列设为null
     要注意子表的外键列不能为not null
     On delete set null从mysql3.23.50开始可用; on update set null从mysql4.0.8开始可用
No action方式
     如果子表中有匹配的记录,则不允许对父表对应候选键进行update/delete操作
     这个是ANSI SQL-92标准,从mysql4.0.8开始支持
Restrict方式
     同no action, 都是立即检查外键约束

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值