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

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

  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这张表前需要删除多少外键约束,比如本表有以一四个约束关系:

mysql中某张表修改较大时的处理_第1张图片

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

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)
;


你可能感兴趣的:(mysql中某张表修改较大时的处理)