3

テーブルの作成に問題があり、何が問題なのかわかりません。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
4

6 に答える 6

14

を確認してGebruikers_gebruiker_idくださいGebruikersgebruiker_id同じデータ型を持っています。

も確認してくださいGebruikers。でgebruiker_idあるPRIMARY KEYGebruikers

アップデート:

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

それを修正 (ON DELETE CASCADE句を変更するか、単に削除) すると、参照を作成できるようになります。

于 2009-08-05T12:48:52.817 に答える
4

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

于 2012-04-12T19:08:21.127 に答える
2

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

于 2011-09-05T07:52:17.610 に答える
1

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

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

于 2016-04-02T08:57:35.440 に答える
0

私の個人的な経験では、これは MySQL の非常にバグのある特性です。テーブル構造とデータをダンプし、テーブルを削除してダンプから SQL を再実行し、手動でインデックスと外部キー制約を再作成するだけで済みます。必要な場所。

于 2010-12-01T16:09:34.037 に答える