我对数据库没有太大的了解,请原谅我,如果有错误的语法或错误的描述,但我尽我所能:)
当我导入到子表时它忽略了外键,虽然父表是空的并且还没有任何数据,我使用以下命令转储没有这个父表数据的数据
mysqldump --ignore-table --no-create-info old_database > data.sql
然后我将这些数据导入我创建的新数据库
mysql new_database < data.sql
然后我只使用此命令转储父行数据
mysqldump --tab="\\uploads"
导入parent_data如下
mysqlimport "\\uploads\parent_data.txt" new_database
为什么MySQL接受这个并忽略现有的外键?并且有没有办法强制MySQL在导入时不忽略FK?
子表显示创建信息
| child |
CREATE TABLE `child`
(
`id` bigint(19) NOT NULL,
`flag` int(10) NOT NULL,
PRIMARY KEY (`id`, `flag`),
KEY `FK72610D66B7AE7814` (`flag`),
CONSTRAINT `FK72610D66AFB765B8`
FOREIGN KEY (`id`) REFERENCES `parent` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
父母创建信息
| parent |
CREATE TABLE `parent`
(
`id` bigint(19) NOT NULL AUTO_INCREMENT,
...
) ;
解决方法:
默认情况下,mysqldump会自动在转储输出中包含一个语句,以将foreign_key_checks设置为0.
因此,如果您希望强制MySQL在导入时不忽略FK,请在命令中使用–compact开关:
例如:
mysqldump --ignore-table=example.test --compact --no-create-info old_database > data.sql
更新
通过defult,foreign_key_checks设置为1.这意味着如果每个DML查询都有FK错误,查询执行将被拒绝并出现错误.
为了提高恢复速度,
MySQL设置foreign_key_checks 0(在转储文件中),之后恢复完成,MySQL设置foreign_key_checks 1.除非你设置了foreign_key_checks 0.
标签:mysql,import,foreign-key
来源: https://codeday.me/bug/20190806/1602870.html