项目中,有时候需要把自己的数据库导出给别人或者把生产环境的数据库拿到测试系统上重现问题.
有时候导出的方式不对,就会导致想导入的时候,会因为表的外键关联关系,导致无法导入(表在SQL中的顺序和依赖外键的表生成的顺序不一样,比如表A在最前面,他外键关联了表P,但是生成和插入表A的数据的时候,表P压根还没有生成呢.)
所以要选择正确的导出方法.才能避免这些问题,以下步骤测试可行
1.选择数据传输,千万不要选转存SQL文件(这种方式就会出现问题)
2.选择存储在本地的文件
3.根据情况,选择使用完整的插入语句和删除已存在的表
不选择使用完整的插入语句,则就没有字段顺序,容易出错
INSERT INTO `accounting_strategy` VALUES ('1', '2018-01-08 10:14:42', null, '计费策略1', null);
选择了就会有
INSERT INTO `accounting_strategy` (`id`, `create_time`, `modify_time`, `name`, `version`) VALUES ('1', '2018-01-08 10:14:42', null, '计费策略1', null);
使用数据传输,带有事物
DROP TABLE IF EXISTS `accounting_strategy`;
CREATE TABLE `accounting_strategy` (
`id` bigint(20) NOT NULL AUTO_INCREMENT ,
`create_time` datetime NULL DEFAULT NULL ,
`modify_time` datetime NULL DEFAULT NULL ,
`name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
`version` int(11) NULL DEFAULT NULL ,
PRIMARY KEY (`id`)
)
ENGINE=InnoDB
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci
AUTO_INCREMENT=2
;
-- ----------------------------
-- Records of accounting_strategy
-- ----------------------------
BEGIN;
INSERT INTO `accounting_strategy` (`id`, `create_time`, `modify_time`, `name`, `version`) VALUES ('1', '2018-01-08 10:14:42', null, '计费策略1', null);
COMMIT;
使用转存SQL文件,则不会带有事物,并且默认删除表,虽然一开头设置了
关闭外键约束检查,但是最后还是会有一堆问题:
SET FOREIGN_KEY_CHECKS=0;
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for accounting_strategy
-- ----------------------------
DROP TABLE IF EXISTS `accounting_strategy`;
CREATE TABLE `accounting_strategy` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`create_time` datetime DEFAULT NULL,
`modify_time` datetime DEFAULT NULL,
`name` varchar(255) NOT NULL,
`version` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of accounting_strategy
-- ----------------------------
INSERT INTO `accounting_strategy` VALUES ('1', '2018-01-08 10:14:42', null, '计费策略1', null);