Tips

ALTER TABLEのシンタックス

日付2009/10/28
ID75917 (英語原文参照)
バージョン11
プラットフォームMac & Win

ALTER TABLEのドキュメントには、コマンドのシンタックスが次のように表現されています。

ALTER TABLE sql_name
{ADD column_definition |
DROP sql_name |
ADD primary_key_definition |
DROP PRIMARY KEY |
ADD foreign_key_definition |
DROP CONSTRAINT sql_name |
SET SCHEMA sql_name}

つまり、ALTER TABLEコマンドには、いろいろな句を記述することができますが、一度に使用することができるのは、いずれかひとつであることを意味しています。

次の例は、ふたつのテーブルが存在し、その間に1対nリレーションを確立してします。ALTER TABLEが複数回コールされていることに注目してください。Begin SQL/End SQLをテーブルで分けているのは、読解性のためです。FOREIGN KEYを定義するためには、すでにPRIMARY KEYが存在していることが必要ですから、この順番を入れ替えることはできません。

なお、この例では、ふたつの異なる方法でPRIMARY KEYを指定しています。最初の例では制約に名前を定義しており、次の例では名前の定義を省略しています。名前の定義は、後にその制約をALTER TABLEで参照する場合に必要です。

Begin SQL
    ALTER TABLE MyOneTable
    ADD myOneID INT32 UNIQUE NOT NULL AUTO_INCREMENT;

    ALTER TABLE MyOneTable
    ADD PRIMARY KEY myOneID;
End SQL

Begin SQL
    ALTER TABLE MyManyTable
    ADD myManyID INT32 UNIQUE NOT NULL AUTO_INCREMENT;

    ALTER TABLE MyManyTable
    ADD CONSTRAINT pk_MyManyTable PRIMARY KEY myManyID;

    ALTER TABLE MyManyTable
    ADD myOneID INT32 NOT NULL;

    ALTER TABLE MyManyTable
    ADD CONSTRAINT fk_MyManyTbl_to_MyOneTbl FOREIGN KEY(myOneID) REFERENCES MyOneTable (myOneID) ON DELETE CASCADE;
End SQL