首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >国外密钥与数据导入

问国外密钥与数据导入
EN

Database Administration用户
提问于 2017-03-14 14:28:18
回答 3查看 17.9K关注 0票数 3

我有:

  • CSV文件(5000+记录);
  • 空的item表;
  • 空favourite表;
  • 其他一些空桌子。

我想用CSV文件的内容填充item表。然后,我想在两个表之间创建一些外键关系。

我该怎么做呢?

每当我尝试这样做时,我总是会收到一个错误:

代码语言:javascript
复制
#1452 - Cannot add or update a child row: a foreign key constraint fails...

注意,我的空favourite表已经设置了一些外键约束。我正在使用PhpMyAdmin和MySQL工作台。

在建立外键关系之前,是否应该使用数据填充所有表?还是设置关系,然后填充数据?

EN

回答 3

Database Administration用户

回答已采纳

发布于 2017-03-14 14:44:43

你有几个选择。您可以在没有约束的情况下创建表,然后添加它们,或者用外键创建表&它们导入禁用外键检查的数据--只需在SET FOREIGN_KEY_CHECKS=0;会话中运行mysql暂时禁用它们。

例如:

代码语言:javascript
复制
mysql> insert into favourite values( 1,1);
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`tmp`.`favourite`, CONSTRAINT `favourite_ibfk_1` FOREIGN KEY (`item_id`) REFERENCES `item` (`item_id`))
mysql> SET FOREIGN_KEY_CHECKS=0;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into favourite values( 1,1);
Query OK, 1 row affected (0.00 sec)
票数 8
EN

Database Administration用户

发布于 2017-03-14 14:41:56

代码语言:javascript
复制
mysql> SET FOREIGN_KEY_CHECKS=0;
mysql> LOAD DATA INFILE ...
mysql> LOAD DATA INFILE ...
mysql> SET FOREIGN_KEY_CHECKS=1;
票数 1
EN

Database Administration用户

发布于 2019-01-16 17:30:30

如果使用终端,请使用以下命令使用凭据登录到MySQL:

代码语言:javascript
复制
mysql -u[your_username] -p[your_password]

使用下面的命令将MySQL外键约束检查设置为0:

代码语言:javascript
复制
SET FOREIGN_KEY_CHECKS = 0;

使用如下所示的源命令导入数据库:

代码语言:javascript
复制
SOURCE /path/to/your/sql/file.sql

并使用以下命令将MySQL外键约束设置为1:

代码语言:javascript
复制
SET FOREIGN_KEY_CHECKS = 1;

P.S.在Ubuntu 14.04、16.04、18.04上测试

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/167141

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档