2016-03-28 114 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表。