文档章节

mysql中某张表修改较大时的处理

z_jordon
 z_jordon
发布于 2015/03/15 11:47
字数 729
阅读 10
收藏 0

项目有一个需要涉及到原来的表构的字段大部分字段都已经没用,只有少数三四个字段还有用着,另外需要增加比较多的新字段,而这张表是比较主要的一张表,其中主键被其它三四张表作为外键,而且该表的记录还需要保留,考虑了挺久用如下方式来处理

  1. 导出原来表的记录:

mysqldump -u logistics -p logistics logistics_expr_del_com> d:/temp/logistics_expr_del_com.sql

(mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名)

导出后手工整理一下sql语句(还好数据量不多)

 2. 从数据字典中查出该表被多少表所依赖

select TABLE_NAME,CONSTRAINT_NAME from `KEY_COLUMN_USAGE` t where t.REFERENCED_TABLE_NAME = 'logistics_expr_del_com';

根据查询查询出一结果整理出在drop这张表前需要删除多少外键约束,比如本表有以一四个约束关系:

整理出的删除外键的语句为:

ALTER TABLE logistics_account_statements DROP FOREIGN KEY  Reflogistics_expr_del_com3;
ALTER TABLE logistics_admin DROP FOREIGN KEY  FKF1882623B3213930;
ALTER TABLE logistics_express_user DROP FOREIGN KEY  Reflogistics_express_del_com;
ALTER TABLE logistics_express_user DROP FOREIGN KEY  Reflogistics_expr_del_com12;

3. 使用drop语句删除该表

drop table logistics_expr_del_com;

4. 创建新的表

CREATE TABLE logistics_expr_del_com(
    id                      VARCHAR(32)       NOT NULL COMMENT '主键',
    company_name            VARCHAR(64)       NOT NULL COMMENT '公司名称',
    registered_address   VARCHAR(128)      NOT NULL default ' ' COMMENT '注册地址',
    office_address          VARCHAR(128)      NOT NULL default ' ' COMMENT '办公地址',
    scope_of_business       VARCHAR(128)      NOT NULL default ' ' COMMENT '经营范围',
    business_licence        VARCHAR(128) COMMENT '营业执照',
    tax_reg_certificate     VARCHAR(128) COMMENT '税务登记证',
    org_code_certificate  VARCHAR(128) COMMENT '组织机构代码证',
    company_phone           VARCHAR(16) COMMENT '公司联系电话',
    company_fax             VARCHAR(16) COMMENT '公司传真',
    company_web_site        VARCHAR(128) COMMENT '公司网址',
    company_logo            VARCHAR(128) COMMENT '公司Logo',
    billing_information     VARCHAR(2560) COMMENT '开票信息',
    legel_name              VARCHAR(64)       NOT NULL default ' ' COMMENT '法人姓名',
    legel_id_number         VARCHAR(18)       NOT NULL default ' ' COMMENT '法人身份证号',
    legel_id_card_image     VARCHAR(128) COMMENT '法人身份证图片',
    legel_msisdn            DECIMAL(11, 0) COMMENT '法人手机',
    legel_telephone         VARCHAR(32) COMMENT '法人固定电话',
    attn_name               VARCHAR(32)       NOT NULL default ' ' COMMENT '经办人姓名',
    attn_id_card_image      VARCHAR(128) COMMENT '经办人身份证图片',
    attn_msisdn             DECIMAL(11, 0)    NOT NULL default 0 COMMENT '经办人手机',
    attn_email              VARCHAR(64)       NOT NULL default ' ' COMMENT '经办人电子邮件',
    attn_telephone          VARCHAR(32) COMMENT '经办人固定电话',
    attn_fax                VARCHAR(32) COMMENT '经办人传真',
    create_date             DATETIME COMMENT '创建时间',
    modify_date             DATETIME COMMENT '修改时间',
    PRIMARY KEY (id)
)ENGINE=INNODB DEFAULT CHARSET=UTF8
COMMENT='快递公司'
;

5.把第一步导出的经过整理的记录插入到新表中

INSERT INTO `logistics_expr_del_com` (id, company_name, create_date, modify_date)
VALUES 
('402880e64be81800014be81b30630002','ems','2015-03-05 12:04:30','2015-03-05 12:13:31'),
('402880e74b3e24a7014b3e286c9d0004','顺丰','2015-01-31 12:03:31','2015-01-31 12:03:31'),
('402880e74b3e24a7014b3e289b5e0005','圆通','2015-01-31 12:03:43','2015-03-05 12:14:01');

6. 重新加上外键约束(根据第二步查询出来结果可以整理出相应的sql):

ALTER TABLE logistics_account_statements ADD CONSTRAINT Reflogistics_expr_del_com3 
    FOREIGN KEY (expr_del_com_id)
    REFERENCES logistics_expr_del_com(id)
;
ALTER TABLE logistics_admin ADD CONSTRAINT FKF1882623B3213930 
    FOREIGN KEY (expr_del_com_id)
    REFERENCES logistics_expr_del_com(id)
;
ALTER TABLE logistics_express_user ADD CONSTRAINT Reflogistics_express_del_com 
    FOREIGN KEY (expr_del_com_id)
    REFERENCES logistics_expr_del_com(id)
;


© 著作权归作者所有

共有 人打赏支持
z_jordon
粉丝 36
博文 251
码字总数 78212
作品 0
厦门
技术主管
私信 提问
MySQL锁定状态查看命令

1 show processlist; SHOW PROCESSLIST显示哪些线程正在运行。您也可以使用mysqladmin processlist语句得到此信息。如果您有SUPER权限,您可以看到所有线程。否则,您只能看到您自己的线程(...

Airship
2016/01/23
7
0
使用mysql中的锁解决高并发问题

为什么要加锁 多核计算机的出现,计算机实现真正并行计算,可以在同一时刻,执行多个任务。在多线程编程中,因为线程执行顺序不可控导致的数据错误。比如,多线程的理想状态是这样的 但是实际情...

紫葡萄0
2018/11/23
0
0
cpu 100% mysql占用太多 优化mysql

转自:http://vickyzhang.blog.51cto.com/5930715/1913054 mysql实例cpu超过100%分析 当我们mysql数据库实例超过100%时,这种情况都是因sql性能问题导致,实例出现卡主现象: 1.原理,cpu消耗过...

君千殇520
2017/11/03
0
0
MySQL数据库表结构设计优化技巧

由于MySQL数据库是基于行(Row)存储的数据库,而数据库操作 IO 的时候是以 page(block)的方式,也就是说,如果我们每条记录所占用的空间量减小,就会使每个page中可存放的数据行数增大,那么每...

Anthony__安东尼__
2017/12/12
0
0
SQL从入门到不放弃(ing)

常用表操作 显示数据库下的表: 显示表列: 修改表名: 删除表: 删除mysql表中所有内容: 修改表列类型 修改表列名字 添加表列 查询结果 插入一行数据 编辑已有数据 将一个数据库下的某表迁...

Kedi
2016/11/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

linux 扩展lv

相关概念 逻辑卷可以实现硬盘空间的动态划分和管理。 1】 物理卷 LV 处于最低层,可以是物理硬盘上的分区,也可以是整个物理硬盘 2】 卷组 VG 卷组建立在物理卷之上,一个卷组至少要包括一个...

hnairdb
25分钟前
1
0
如何快速定位Ruby函数源码

如何快速定位Ruby函数源码 1、gem gem which sidekiq 2、bundle bundle show redis 3、CTags Sublime extend ActiveSupport::Concernrescue_fromcurrent_company.cc_ad_tasks.creat......

mingle
26分钟前
1
0
基于 DataLakeAnalytics 的数据湖实践

随着软硬件各方面条件的成熟,数据湖(Data Lake)已经越来越受到各大企业的青睐, 与传统的数仓实践不一样的是,数据湖不需要专门的“入仓”的过程,数据在哪里,我们就从哪里读取数据进行分析...

阿里云云栖社区
27分钟前
1
0
word文档处理成富文本生成sql语句导入mysql

问题:需要将大量的已存在的word文档导入到web项目里在网站展示,不可能通过编辑录入的方式处理,通过程序实现。 解决思路:通过读取word文档处理成html,再获取html富文本内容,拼接成sql,...

S三少S
34分钟前
42
0
WAF开放规则定义权:专家策略+用户自定义策略=Web安全

在第一期“漫说安全”栏目中,我们用四格漫画的形式介绍了基于深度学习的阿里云WAF到底智能在哪里,能帮客户解决什么问题。 在今天的这期栏目里,我们依然通过漫画这种通俗易懂的方式,与大家...

迷你芊宝宝
38分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部