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