質問

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

このテーブルは子テーブルであり、別のテーブルと1対多の識別関係があります。

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) 

編集:これは私が見つけることができるエラーコードに関するすべてのドキュメントです:リンク

EDIT2:写真を削除

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
役に立ちましたか?

解決

Gebruikers_gebruiker_id Gebruikers gebruiker_id のデータ型が同じであることを確認します。

Gebruikers gebruiker_id Gebruikers

PRIMARY KEY であることも確認してください

更新:

ON DELETE SET NULL が定義されていますが、 Gebruikers_gebruiker_id NOT NULL として定義されています。

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

他のヒント

通常はデータ型の不一致が原因です。両方が unsigned であるかどうかのintチェックである場合は覚えておいてください

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

追加するもう1つの理由:

  

異なる文字セットまたはエンジンもこの問題を引き起こします

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top