2016-03-28 14 views
0

に.sqlファイルをインポートするとき、私はこれをインポートしようとするとエラー - 私は.I MySQL Workbenchを使用して作成され.SQLファイルがワークベンチへの.sql .Butからエクスポートファイルを行っているしています.sqlファイルローカルホスト/ phpmyadminそのエラーを示しています。phpmyadminの

1005 - テーブルamarjobsを作成できません。 profiles(errnoに: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; 

問い合わせの上ではそうMY_TABLE &からユニークなテーブルを取得PARENT_TABLE columndであなたのすべてのテーブルのすべての親テーブルを提供しますparent_tableリストを作成し、これらのテーブルのバックアップをソースサーバから取得し、ターゲットサーバでリストアします。

+0

あなたのやり方で 'プロファイル'テーブルはインポートされますが、別のテーブル' profile_skills'は同じエラーを表示しています。実際に何が問題なのか知りたいですか? –

+2

あなたがバックアップを取った方法...あなたはmysqldumpユーティリティでバックアップを取ってから、mysqlユーティリティでインポートしなければなりません.....実際に子テーブルを作成するときは、最初にリファレンス/親テーブルをチェックします。親テーブルを作成してから、子テーブルをインポートすることができます... –

+0

あなたはできることのためにあなたのバックアップファイル(.sql)をあなたのプラットフォームのウィンドウ/ Linuxに応じて任意のエディタで開き、 "set foreign_key_checks = 0;"開始時に "set foreign_key_checks = 1;"最後に...すべてのテーブルをインポートします......しかし、親テーブルがデータベースにない場合、制約は正しく機能しません... –

0

プライマリキーをamarjobsにする必要があります。 usersテーブル。