2016-03-28 116 views
0

我有与MySQL Workbench。我创建所做的导出文件从工作台.SQL。但一个.SQL文件当我尝试导入此.sql文件在localhost/phpmyadmin它显示一个错误。错误 - 当在phpMyAdmin导入.sql文件

1005 - 无法创建表amarjobsprofiles(错误:150 “外国 键约束的格式不正确”)

profiles表:

-- Table `amarjobs`.`profiles` 
-- ----------------------------------------------------- 
CREATE TABLE IF NOT EXISTS `amarjobs`.`profiles` (
    `id` INT NOT NULL AUTO_INCREMENT COMMENT 'job seeker\'s profile table', 
    `userID` INT NULL, 
    `firstName` VARCHAR(45) NULL, 
    `lastName` VARCHAR(45) NULL, 
    `middleName` VARCHAR(45) NULL, 
    `DOB` DATE NULL, 
    `gender` ENUM('M','F','Other') NULL, 
    `featuredProfile` ENUM('Y','N') NULL DEFAULT 'N', 
    `email` VARCHAR(100) NULL, 
    `phone` VARCHAR(50) NULL, 
    `summary` VARCHAR(500) NULL, 
    `profilePic` VARCHAR(32) NULL, 
    `created_at` TIMESTAMP NULL, 
    `updated_at` TIMESTAMP NULL, 
    PRIMARY KEY (`id`), 
    INDEX `fkProfilesUserID_idx` (`userID` ASC), 
    CONSTRAINT `fkProfilesUserID` 
    FOREIGN KEY (`userID`) 
    REFERENCES `amarjobs`.`users` (`id`) 
    ON DELETE NO ACTION 
    ON UPDATE CASCADE) 
ENGINE = InnoDB; 

一些表是进口的,但为什么profiles表将不会导入?你能告诉我问题在哪里吗?

+0

检查外键和引用的主键列类型应该是相同的 –

+0

请看看http://pastebin.com/asPW444K中的'users'表和'profiles'表 –

回答

2

假设您从其他服务器导入数据。所以不应该有与外键创建相关的问题...

先导入其父表users表,然后您可以导入此表。这是干净的方式。

其他方面,您可以在设置foreign_key_checks禁用后强制导入。但你不应该这样做,并使用干净的方式。

更新:

您可以通过此查询获得所有相关表:

SELECT table_name AS 'My_Table',REFERENCED_TABLE_NAME AS 'Parent_Table' FROM information_schema.KEY_COLUMN_USAGE WHERE TABLE_SCHEMA ='pass_your_db_here' AND table_name in ('table1','table2',.....'tablen') AND REFERENCED_TABLE_NAME IS NOT NULL; 

上面的查询将提供所有的父母表中parent_table columnd所有的表,以便从MY_TABLE &得到独特的表parent_table列表并从源服务器备份这些表并在目标服务器上恢复。

+0

如果我按你的方式做'profile '表被导入,但另一个表'profile_skills'显示相同的错误。我想知道实际上是什么问题? –

+2

你如何进行备份......你应该通过mysqldump实用程序进行备份,然后通过mysql实用程序进行导入.....实际上,当你创建任何子表时,首先它将检查其引用/父表,因此通常首先需要创建父表,然后你可以导入子表... –

+0

为你可以做的一个技巧:根据你的平台窗口/ linux在任何编辑器中打开你的备份文件(.sql),并添加一行“set foreign_key_checks = 0;”在开始和“set foreign_key_checks = 1;”在最后......它会导入所有的表......但如果你的数据库中缺少任何父表,那么约束将无法正常工作...... –

0

您应该使(id)主键在amarjobsusers表。