mysql 导入sql文件 外键报错_为什么MySQL在导入时会忽略外键?

我对数据库没有太大的了解,请原谅我,如果有错误的语法或错误的描述,但我尽我所能:)

当我导入到子表时它忽略了外键,虽然父表是空的并且还没有任何数据,我使用以下命令转储没有这个父表数据的数据

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值