0

そのため、過去2日間ほぼ調べましたが、mysqlで外部キーを追加できないのは何なのかわかりません。外部キーを含む 2 番目のテーブルのコードを実行すると、次のエラーが発生します。

#1072 - キー列 'album' がテーブルに存在しません

コードを数回修正したため、コードに構文エラーはないと確信しています。

以前に stakOVF で同じ質問を見たことがありますが、これらの質問の問題は非常に明白な構文エラーでしたが、これらの質問の解決策はどれも私の問題に関連していませんでした。

したがって、これが私が実行していて、上記のエラーが返されるコードです。前もって感謝します。

    CREATE TABLE ‘Album’(
    ‘id’ INT AUTO_INCREMENT PRIMARY KEY ,
    ‘name’ VARCHAR( 35 ) NOT NULL 
    ) ENGINE = InnoDB;

上記のコードは問題なく実行されますが、以下のコードを実行するとエラーが発生します

    CREATE TABLE ‘Picture’(
    ‘id_pk’ INT AUTO_INCREMENT PRIMARY KEY ,
    ‘album’ INT,
    ‘pictureURL’ VARCHAR( 270 ) NOT NULL ,
    ‘name’ VARCHAR( 35 ) NOT NULL ,
    CONSTRAINT album_fk FOREIGN KEY ( album ) REFERENCES Album( id ) 
  ) ENGINE = InnoDB;

CONSTRAINT 行をいじりましたが、次の形式の FOREIGN KEY (album) REFERENCES Album(id) でもありました。つまり、制約が前に追加されていません。

ありがとうございます。構文エラーがありましたが、面白い引用符に関係していると言う人もいましたが、それらを削除すると、魅力のように機能します。どうもありがとう!

4

5 に答える 5

3

まず、予約語が使用されているため、引用符は必要ありません。

引用符なしでこれらのSQLクエリを実行しようとしましたが、うまくいきました。

    CREATE TABLE Album(
id INT AUTO_INCREMENT PRIMARY KEY ,
name VARCHAR( 35 ) NOT NULL 
) ENGINE = InnoDB;


CREATE TABLE Picture(
id_pk INT AUTO_INCREMENT PRIMARY KEY ,
album INT,
pictureURL VARCHAR( 270 ) NOT NULL ,
name VARCHAR( 35 ) NOT NULL ,
CONSTRAINT album_fk FOREIGN KEY ( album ) REFERENCES Album( id ) 
) ENGINE = InnoDB;

CREATE TABLE 'Album' は、Album の代わりに 'Album' 名、id と name の代わりに 'id' と 'name' フィールドを持つテーブルを作成します。

于 2013-06-28T11:21:47.693 に答える
2

外部キーとして宣言する前に、列「アルバム」にインデックスを付ける必要があると思いますこれが機能するかどうかを確認してください

CREATE TABLE ‘Picture’(
    ‘id_pk’ INT AUTO_INCREMENT PRIMARY KEY ,
    ‘album’ INT,
    ‘pictureURL’ VARCHAR( 270 ) NOT NULL ,
    ‘name’ VARCHAR( 35 ) NOT NULL ,
     INDEX (album),
    CONSTRAINT album_fk FOREIGN KEY ( album ) REFERENCES Album( id ) 
  ) ENGINE = InnoDB;
于 2013-06-28T11:18:27.083 に答える
1

私の知る限り、外部キーを実際に外部キーにするためには、外部キーをインデックスにする必要があります。

この例は、mysql dev ドキュメント ( http://dev.mysql.com/doc/refman/5.6/en/create-table-foreign-keys.html )で見つけました。

CREATE TABLE parent (
    id INT NOT NULL,
    PRIMARY KEY (id)
) ENGINE=INNODB;

CREATE TABLE child (
    id INT, 
    parent_id INT,
    INDEX par_ind (parent_id),
    FOREIGN KEY (parent_id) 
        REFERENCES parent(id)
        ON DELETE CASCADE
) ENGINE=INNODB;

よくわかりませんが、それに応じてコードを変更してみてください。

于 2013-06-28T11:11:55.357 に答える
1

名前の一部になる興味深い引用を使用しているようですね。それらを削除すれば問題ありません

于 2013-06-28T11:25:53.240 に答える
1

MysQL Workbench を入手することをお勧めします。無料で簡単なディスログが、この種のプロセスを案内してくれます。

これは私にとってはうまくいきます。列の使用法をより明確にするために、フィールド名albumをに変更しました。albumId

CREATE  TABLE `Picture` (
`id` INT NOT NULL AUTO_INCREMENT ,
`albumId` INT NULL ,
`pictureURL` VARCHAR(270) NOT NULL ,
`name` VARCHAR(35) NOT NULL ,
PRIMARY KEY (`id`) ,
INDEX `album_fk_idx` (`albumId` ASC) ,
CONSTRAINT `album_fk` FOREIGN KEY (`albumId` ) REFERENCES `album` (`id` ) ON DELETE NO ACTION ON UPDATE NO ACTION)
ENGINE = InnoDB;
于 2013-06-28T11:27:26.373 に答える