项目有一个需要涉及到原来的表构的字段大部分字段都已经没用,只有少数三四个字段还有用着,另外需要增加比较多的新字段,而这张表是比较主要的一张表,其中主键被其它三四张表作为外键,而且该表的记录还需要保留,考虑了挺久用如下方式来处理
导出原来表的记录:
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=UTF8COMMENT='快递公司';
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);