write ahead log

ロールフォワード用

CREATE TABLEで制約(Constraint)を付けたり外したり

追加する方法は知ってても, 削除する方法を知らなかったりする.

そんな制約ですが, 何度調べても忘れるのでメモします, はい.

MySQLでやります.

テーブル例

例がないと困るので適当に用意しました.

会社と部署にしましょう.

CREATE TABLE company(
    id      INT PRIMARY KEY,
    name    VARCHAR(20)
)
CREATE TABLE dept(
    id          INT PRIMARY KEY,
    name        VARCHAR(20),
    company_id  INT
)

deptのcompany_idにcompanyのidへの制約を付けたいと思います.

制約を付ける先はUniqueじゃないとだめなので注意です.
(ここではPrimary keyにしました)

追加する

追加する時に重要なのは名前を付けて制約を付けることです.
これで削除が楽になります.

以下のフォーマットで追加できます.

ALTER TABLE [子側のテーブル] ADD CONSTRAINT [制約名] FOREIGN KEY([子のカラム]) REFERENCES [親テーブル]([親のカラム])

例で言うとこんな感じ.

ALTER TABLE dept ADD CONSTRAINT deptToCompany FOREIGN KEY(company_id) REFERENCES company(id)

削除する

以下のフォーマットで削除できます.

ALTER TABLE [テーブル名] DROP FOREIGN KEY [制約名]

例で言うとこんな感じ.

ALTER TABLE dept DROP FOREIGN KEY deptToCompany

感想

書かないと忘れる.