2009-08-05 27 views
2

テーブルの作成に問題があり、何が問題なのか分かりません。 phpMyAdminは、PRIMARY KEY宣言の隣にエラーインジケータを設定します...なぜこれが間違っているのかわかりません...MySQLエラー150、テーブルを作成できません

このテーブルは、他のテーブルと一対一の関係を持つ子テーブルです。

CREATE TABLE IF NOT EXISTS `ruilen`.`Voorwerpen` (
`voorwerpen_id` INT NOT NULL AUTO_INCREMENT , 
`naam` VARCHAR(45) NOT NULL , 
`beschrijving` VARCHAR(45) NULL , 
`Gebruikers_gebruiker_id` INT NOT NULL , 
PRIMARY KEY (`voorwerpen_id` , `Gebruikers_gebruiker_id`) , 
CONSTRAINT `fk_Voorwerpen_Gebruikers1` FOREIGN KEY (`Gebruikers_gebruiker_id`) REFERENCES `ruilen`.`Gebruikers` (
`gebruiker_id` 
) ON DELETE SET NULL ON UPDATE CASCADE 
) ENGINE = InnoDB; 

MySQL said: Documentation 
#1005 - Can't create table 'ruilen.voorwerpen' (errno: 150) 

EDIT:これは私が見つけることができるのエラーコード上のすべてのドキュメント:Link

EDIT2:PIC削除

EDIT3:

CREATE TABLE `gebruikers` (
`gebruiker_id` int(11) NOT NULL, 
`naam` varchar(45) NOT NULL, 
`straat` varchar(45) NOT NULL, 
`gemeente` varchar(45) NOT NULL, 
`mail` varchar(45) NOT NULL, 
`beschrijving` varchar(45) DEFAULT NULL, 
PRIMARY KEY (`gebruiker_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 

答えて

14

確認することをGebruikers_gebruiker_idGebruikersgebruiker_idには同じデータ型があります。

Gebruikersもチェックしてください。あなたのGebruikers_gebruiker_idNOT NULLのように定義されている間、

あなたが定義されON DELETE SET NULLを持っている:gebruiker_idPRIMARY KEY

Gebruikersで更新しています。

これを修正して(ON DELETE CASCADEに変更するか、句を削除してください)、参照を作成することができます。

+0

PICはより多くの情報のために加え、この問題が発生します、あなたが言ったことはケースのようです。 – KdgDev

+0

次の文を実行してください: 'SHOW CREATE TABLE Gebruikers'とその出力はここに記入してください。 – Quassnoi

+0

完了。私はgebruiker_idを一意に設定する必要があるのだろうかと思っていますが、MySQLワークベンチにはそのオプションがないようです... – KdgDev

0

これはMySQLの非常にバグの特徴です。テーブルの構造とデータをダンプしてから、テーブルを削除してダンプからSQLを再実行してから、手動でインデックスを再作成してください必要に応じて外部キーの制約があります。

2

これはmysqlのバグの特徴です。 これには2つの理由が考えられます。 1)PKとFKのデータ型が一致しません。 2)このエラーは、インデックスを明示的に定義する必要がある4.1以前のバージョンで発生します。

4

私の場合は、通常、データ型の不一致が原因です。それがintチェックであることを覚えておいてください。符号なしかどうか

0

違うテーブルに同じ名前の制約がありました。 制約の名前を変更してみてください。

1

もう一つの理由は、追加する:

異なる文字セットやエンジンも

関連する問題