mysql中某張表修改較大時的處理

項目有一個須要涉及到原來的表構的字段大部分字段都已經沒用,只有少數三四個字段還有用着,另外須要增長比較多的新字段,而這張表是比較主要的一張表,其中主鍵被其它三四張表做爲外鍵,並且該表的記錄還須要保留,考慮了挺久用以下方式來處理mysql

  1. 導出原來表的記錄:web

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

(mysqldump -u 用戶名 -p 數據庫名 表名> 導出的文件名)數據庫

導出後手工整理一下sql語句(還好數據量很少)
express

 2. 從數據字典中查出該表被多少表所依賴code

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

根據查詢查詢出一結果整理出在drop這張表前須要刪除多少外鍵約束,好比本表有以一四個約束關係:圖片

整理出的刪除外鍵的語句爲:it

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語句刪除該表io

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)
;
相關文章
相關標籤/搜索