mysql保留元数据的情况下修改表结构
2016-03-31 22:42
323 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u012572591/article/details/51030867
问题:目前有多个数据库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, 都是立即检查外键约束 】
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, 都是立即检查外键约束 】
相关文章推荐
- mysql笔记--数据库基本增删改查 修改表结构
- 使用TC7拷贝当天修改过的代码文件,并保留目录结构
- MySQL 分区表 partition线上修改分区字段,后续进一步学习partition (2) --> 子分区以及对录入Null值的处理情况.
- Mysql修改表结构工具OnlineSchemaChange使用心得
- 数据库MYSQL---修改表结构
- mysql更改表结构:添加、删除、修改字段、调整字段顺序
- mysql修改表结构和数据库备份还原
- mysql 修改数据库表结构
- mysql 修改数据表结构
- MySQL修改表结构命令
- mysql alter table命令修改表结构实例详解
- mysql千万级数据表结构修改
- MySQL 修改表结构性能问题
- 查看mysql字符集及修改表结构
- 批量修改mysql表结构信息
- MySql 数据库 sql 语句 修改 表结构
- mysql 修改表结构操作
- mysql大数据量下修改表结构的方法
- mysql修改表名,查看表结构,删除表
- MySql表结构修改详解