您的位置:首页 > 数据库 > MySQL

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

2016-03-31 22:42 323 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/u012572591/article/details/51030867

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, 都是立即检查外键约束 】
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: