13

質問:

外部キー制約を使用してテーブルを変更しようとすると、エラーが発生するのはなぜですか?

詳細:

他のすべての特定の履歴テーブル(つまり、、、...)HSTORYのベーステーブルとして使用するテーブルが1つあります。と呼ばれるテーブルも含めました。USER_HISTORYBROWSER_HISTORYPICTURE_HISTORYPICTUREUSER

履歴テーブル:

CREATE TABLE IF NOT EXISTS HISTORY
(
   ID        INT NOT NULL AUTO_INCREMENT,
   VIEWERID  INT NOT NULL ,
   VIEWDATE  TIMESTAMP NOT NULL DEFAULT NOW(),

   PRIMARY KEY (ID),
   FOREIGN KEY (VIEWERID) REFERENCES USER(ID)
)
engine=innodb;

USERテーブル:(誰かが興味を持っている場合)

CREATE TABLE IF NOT EXISTS USER
(
   ID        INT NOT NULL AUTO_INCREMENT,

   PRIMARY KEY (ID)
)
engine=innodb;

PICTUREテーブル:(誰かが興味を持っている場合)

CREATE TABLE IF NOT EXISTS PICTURE
(
   ID        INT NOT NULL AUTO_INCREMENT,

   PRIMARY KEY (ID)
)
engine=innodb;

PICTURE_HISTORYテーブル:

CREATE TABLE IF NOT EXISTS PICTURE_HISTORY LIKE HISTORY;

ALTER TABLE PICTURE_HISTORY
ADD FOREIGN KEY (FOREIGNID) REFERENCES PICTURE(ID);

ただし、これを行うと、次のようになります。

Key column 'FOREIGNID' doesn't exist in table

これは、最初に作成する必要があることを意味しますFOREIGNIDが、SOの多くの例では、上記が機能するはずです。なぜこれが起こっているのか誰もが知っていますか?

4

2 に答える 2

26

私の間違いを指摘してくれたマイケルに感謝します。列が既に存在しない限り、実際に外部キーを作成することはできません。代わりに次の 2 つのコマンドを発行すると、外部キー制約が作成されます。

ALTER TABLE PICTURE_HISTORY
ADD COLUMN FOREIGNID INT NOT NULL;

ALTER TABLE PICTURE_HISTORY
ADD FOREIGN KEY (FOREIGNID) REFERENCES PICTURE(ID);
于 2012-04-29T02:49:53.973 に答える
8

次のように、コンマを使用して mysql のコマンドを組み合わせることができます。

ALTER TABLE PICTURE_HISTORY
ADD COLUMN FOREIGNID INT NOT NULL,
ADD FOREIGN KEY (FOREIGNID) REFERENCES PICTURE(ID);
于 2013-05-20T23:33:10.633 に答える