2

クライアント/プロジェクトのために行ったすべてのデザイン/作品をカタログ化するために、オンラインポートフォリオWebサイト用にMySQLでデータベースを作成しています。マークアップを手動で編集する代わりに、新しい作品を簡単に追加できるようにするためにこれを行っています.

とにかく、以下のスクリプトを実行してみました:

create table album (
   AlbumID int not null,
   AlbumOrder int not null,
   AlbumName varchar(100),
   primary key (AlbumID, AlbumOrder)
);

create table category (
   CategoryID int not null primary key auto_increment,
   CategoryName varchar(100)
);

create table item (
   ItemID int not null primary key auto_increment,
   CategoryID int not null,
   AlbumID int not null,
   AlbumOrder int not null,
   ItemName varchar(100),
   Description varchar(500),
   ThumbPath varchar(100),
   PhotoPath varchar(100),
   InsertDate datetime,
   EditDate datetime,
   constraint fk_catID foreign key (CategoryID) references category (CategoryID) on update cascade,
   constraint fk_albID foreign key (AlbumID) references album (AlbumID) on update cascade,
   constraint fk_albOrd foreign key (AlbumOrder) references album (AlbumOrder) on update cascade
);

アイテム テーブルを作成できないという 1005 エラーが表示されます。どこに問題があるのか​​ わかりませんが、それは本当に明白だと確信しています!

編集: 使用されるエンジンは innoDB です。

4

3 に答える 3

0

あなたの発言は現在存在しているので、何も問題はありません。

テストmysql環境でそれらを正常に実行しました。ただし、私の環境はあなたの環境とは異なる場合があります。私のデフォルトのエンジンは InnoDB ですが、あなたの環境は別のものかもしれません。

外部キー制約を使用しているため、エンジンが InnoDB ("...) engine = Innodb") であることを明示的に指定する必要があります。

また、既に 1 つ以上のテーブルが存在していることが原因である可能性もあります。各作成の前に DROP... IF EXISTS を指定すると、正常に動作するはずです。

于 2013-07-03T12:59:21.973 に答える
0

show engine innodb statusエラーを受け取った直後にMySQL ステートメントを実行すると、エラーの詳細を取得できます (出力は短縮されています)。

LATEST FOREIGN KEY ERROR

Cannot find an index in the referenced table where the
referenced columns appear as the first columns, or column types
in the table and the referenced table do not match for constraint.

参照されるテーブルには、参照される列が最初の列としてリストされているインデックスが必要です。これは には無効ですfk_albOrd foreign key (AlbumOrder)

AlbumOrderこの問題を解決するには、Albumテーブルの列にインデックスを追加するか、できれば、Derek Kromm が提案するようにfk_albOrd、制約を削除して列のグループに変更します。fk_albID

constraint fk_albID foreign key (AlbumID, AlbumOrder) references album (AlbumID, AlbumOrder) on update cascade
于 2013-07-03T14:04:50.910 に答える