我对数据库不太了解,所以请原谅,如果语法不好或者描述不好,但我已经尽力了:)
导入子表时,它会忽略外键,尽管父表是空的,而且还没有任何数据,但我使用以下命令转储没有父表数据的数据
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在导入时不忽略FKs?
子表显示创建信息
| 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,
...
) ;
发布于 2017-04-26 05:06:40
默认情况下,mysqldump自动在转储输出中包含一条语句,将foreign_key_checks设置为0。
因此,如果您希望在导入时强制MySQL不要忽略FKs,请在命令中使用-紧凑开关:
例如:
mysqldump --ignore-table=example.test --compact --no-create-info old_database > data.sql
foreign_key_checks设置为1。这意味着,如果每个DML查询都有FK错误,则查询执行将被拒绝。
为了提高恢复的速度,MySQL设置foreign_key_checks 0 (在转储文件中),在恢复完成之后,MySQL设置foreign_key_checks 1。除非您已经设置了foreign_key_checks 0。
https://dba.stackexchange.com/questions/171955
复制相似问题