2013-01-12 12 views
5

私は以下の表を持っている:SQL:ERROR 1005:テーブルを作成できません 'obl2.itemsubjects'(errnoに:121)

CREATE TABLE `OBL2`.`item` (
`itemID` INT NOT NULL AUTO_INCREMENT , 
`itemName` VARCHAR(45) NOT NULL , 
PRIMARY KEY (`itemID`) , 
INDEX `itemName` (`itemName` ASC)); 

CREATE TABLE `OBL2`.`subject` (
`subjectID` INT NOT NULL , 
`subjectName` VARCHAR(45) NOT NULL , 
PRIMARY KEY (`subjectID`)); 

の接続は、多くの多くであることから、各項目が多くを持つことができます件名と各件名は多くの項目に関連付けることができます - 私は接続テーブルを設定したいと思います。 これは私のコードです:

CREATE TABLE `OBL2`.`itemsubjects` (
`itemID` INT NOT NULL , 
`subjectID` INT NOT NULL , 
PRIMARY KEY (`itemID`, `subjectID`) , 
INDEX `itemID_idx` (`itemID` ASC) , 
INDEX `subjectID_idx` (`subjectID` ASC) , 
CONSTRAINT `itemID` 
FOREIGN KEY (`itemID`) 
REFERENCES `OBL2`.`item` (`itemID`) 
ON DELETE CASCADE 
ON UPDATE CASCADE, 
CONSTRAINT `subjectID` 
FOREIGN KEY (`subjectID`) 
REFERENCES `OBL2`.`subject` (`subjectID`) 
ON DELETE CASCADE 
ON UPDATE CASCADE); 

が、何らかの理由で第三表のコードは受け付けていません。 私は、エラーメッセージが出ます:私は、インターネット上の誤りについて読んで、それは言う

ERROR 1005:テーブルを作成できません 'obl2.itemsubjects'(121エラー番号を)それはMYSQLの既知の問題ですが、解決策はありません。

どのような考えですか?

+0

あなたは3番目のテーブル用のテーブルを作成するスクリプト内で最初の二つのテーブルにいくつかのデータを挿入しようとしてから追加することはできますか? – bonCodigo

+0

ちょっとbonCondigo、私は今それを試みた..まだ同じエラー。私は著者と同じことを早くやったと言わねばならず、それは完璧に働いていました。なぜ私は被験者が失敗するのか理解することができます。 –

+0

dbで明示的なテーブル名を指定する必要がありますか? – bonCodigo

答えて

3

MySQLのドキュメントはFOREIGN KEY Constraints(強調鉱山)で言う:CONSTRAINTシンボル句が与えられた場合

シンボル値はデータベース内で一意でなければなりません。節が与えられない場合、InnoDBは自動的に名前を作成します。だから、

itemsubjectテーブルの作成が失敗した理由は、あなたが別の(外部キー)itemIDという名前の制約、またはデータベースの他のテーブルでsubjectIDという名前のものを持っていたということでした。

データベース全体で標準的な命名規則を持つことは良いことです。あなたはインデックスのColumnName_idxを持っているのと同じように、あなたは外部キー制約のためにReferencedTable_ReferencingTable_FKを使用することができます。

CREATE TABLE OBL2.itemsubjects (
    itemID INT NOT NULL , 
    subjectID INT NOT NULL , 
    PRIMARY KEY 
    (itemID, subjectID) , 
    INDEX itemID_idx       -- I like these 
    (itemID ASC) , 
    INDEX subjectID_idx      -- two 
    (subjectID ASC) , 
    CONSTRAINT item_itemsubject_FK    -- what I propose, here 
    FOREIGN KEY (itemID) 
    REFERENCES OBL2.item (itemID) 
     ON DELETE CASCADE 
     ON UPDATE CASCADE, 
    CONSTRAINT subject_itemsubject_FK   -- and here 
    FOREIGN KEY (subjectID) 
    REFERENCES OBL2.subject (subjectID) 
     ON DELETE CASCADE 
     ON UPDATE CASCADE 
); 
関連する問題