2011-07-27 25 views
0

こんにちは私は、ユーザ情報を保持するユーザ名とパスワードを保持する2つのmysqlテーブルを持っています。ここでは、テーブルは以下のとおりです。このテーブルでmysql外部キー

CREATE TABLE IF NOT EXISTS `test`.`dbo.users` (
    `userId` INT(11) NOT NULL AUTO_INCREMENT , 
    `userUsername` VARCHAR(45) NULL , 
    `userPassword` VARCHAR(45) NULL , 
    `dbo.userProfiles_userProfileId` INT(11) NOT NULL , 
    PRIMARY KEY (`userId`, `dbo.userProfiles_userProfileId`) , 
    INDEX `fk_dbo.users_dbo.userProfiles` (`dbo.userProfiles_userProfileId` ASC) , 
    CONSTRAINT `fk_dbo.users_dbo.userProfiles` 
    FOREIGN KEY (`dbo.userProfiles_userProfileId`) 
    REFERENCES `test`.`dbo.userProfiles` (`userId`) 
    ON DELETE CASCADE 
    ON UPDATE CASCADE) 
ENGINE = InnoDB; 

CREATE TABLE IF NOT EXISTS `test`.`dbo.userProfiles` (
    `userProfileId` INT(11) NOT NULL AUTO_INCREMENT , 
    `userId` INT(11) NOT NULL , 
    `userFirstName` VARCHAR(45) NULL , 
    `userMidleName` VARCHAR(45) NULL , 
    `userLastName` VARCHAR(45) NULL , 
    `userBirthDate` VARCHAR(45) NULL , 
    `userCountry` VARCHAR(45) NULL , 
    `userState` VARCHAR(45) NULL , 
    `userCity` VARCHAR(45) NULL , 
    `userZipCode` VARCHAR(45) NULL , 
    `userPrimaryAddress` VARCHAR(45) NULL , 
    `userSecondaryAddress` VARCHAR(45) NULL , 
    `userThirdAddress` VARCHAR(45) NULL , 
    `userFirstPhone` VARCHAR(45) NULL , 
    `userSecondaryPhone` VARCHAR(45) NULL , 
    `userThirdPhone` VARCHAR(45) NULL , 
    `userFirstEmail` VARCHAR(45) NULL , 
    `userSecondaryEmail` VARCHAR(45) NULL , 
    `userThirdEmail` VARCHAR(45) NULL , 
    `userDescription` VARCHAR(45) NULL , 
    PRIMARY KEY (`userProfileId`, `userId`)) 
ENGINE = InnoDB; 

私の問題は、FKキーが動作しないと私はなぜ私はここで何かが欠けてるかわからないということです...(私は多くの外部キーを使用していません)。

エラー:私は、この表や他人にFKを使用できるように

Executing SQL script in server

ERROR: Error 1005: Can't create table 'test.dbo.users' (errno: 150)

これを固定助けてくださいことはできますか? fkキーがどのように正確に機能するかを私に説明する余裕があれば(mysql workbenchを使ってダイアグラム上に作成してフォワードエンジニアを使って)

+1

最初に 'userProfiles'テーブルを作成する必要があります。 –

+0

最初にuserProfilesテーブルを作成してからusersテーブルを作成することはどういう意味ですか?あなたは私がfkツールを使用して初めてuserProfilesをクリックしてからusersテーブルを使用するのですか? – Bogdan

+0

テーブルの作成順序を変更する: 'userProfiles' **最初の**、'ユーザー '** 2番目の** – Bohemian

答えて

1

ルートテーブルを最初に作成する必要があります(userProfiles)。 set foreign_key_checks=0で外部キーチェックを無効にすることで、この制限を一時的に回避できます。これは、循環参照を使用して複数のテーブルを作成する場合に行う必要があります。