CodeGym /コース /SQL SELF /ALTER TABLEでテーブル構造を変更する方法

ALTER TABLEでテーブル構造を変更する方法

SQL SELF
レベル 17 , レッスン 4
使用可能

さて、既に作ったテーブルをどうやって変更するかについて話そう。プロジェクトの現場では、何も変わらないことなんてほぼないよね。要件が突然降ってくることもあるし、まるでボンバルディロクロコディロみたいに(笑)。例えば、プロダクトマネージャーが「全ユーザーにプロフィール背景色のユニークIDが必要だ!」って言い出したり、VARCHAR(50)じゃ名前には短すぎるって気づいたり(実際に「ボンバルディロクロコディロ-ジュニア-サード」みたいなユーザーがいたりするし)。

そんな時に使えるのが、PostgreSQLのALTER TABLEコマンドなんだ。

ALTER TABLEは、既存テーブルの構造を変更できるコマンドだよ。これでできることは:

  • 新しいカラムを追加する;
  • いらないカラムを削除する;
  • カラムのデータ型を変更する;
  • テーブルやカラムの名前を変える;
  • NOT NULLUNIQUEみたいな制約を追加・削除する、などなど。

イメージとしては、もう家(テーブル)を建てた後に、新しい部屋(カラム)を増築したり、いらない物置(カラム)を壊したりする感じだね。

ALTER TABLEのシンタックス

コマンドの基本構造は直感的でわかりやすいよ:

ALTER TABLE テーブル
    変更アクション;

ここで:

  • テーブル — 変更したいテーブル名;
  • 変更アクション — 実際にやりたい操作(例えばカラム追加・削除やデータ型変更など)。

ALTER TABLEの使い方例

新しいカラムの追加

テーブルに新しいカラムを追加したい時は、ADD COLUMNを使うよ。例:

ALTER TABLE students
ADD COLUMN email VARCHAR(100);

このコマンドで、studentsテーブルにemailカラムが追加される。ここには学生のメールアドレスを保存できるよ。データ型は最大100文字の文字列。

例えば、学生テーブルを作ったけど入学日を入れるのを忘れた場合、こうやって追加できる:

ALTER TABLE students
ADD COLUMN enrollment_date DATE;

これでenrollment_dateカラムができて、入学日を保存できるようになる。

カラムの削除

もういらないカラムがあれば、DROP COLUMNで削除できる。例えば:

ALTER TABLE students
DROP COLUMN email;

このコマンドでstudentsテーブルからemailカラムが消えるよ。ちなみに、このカラムのデータも復元できずに消えるから注意!

重要ポイント:

もし削除しようとしたカラムが他のテーブルで使われてたら(例えば外部キーとか)、PostgreSQLはエラーを出すよ。そういう時は、まず依存関係を消してからやろう。

カラムのデータ型変更

最初に決めたデータ型が合わなくなることもあるよね。例えば、学生の年齢をSMALLINTで作ったけど、やっぱりBIGINTにしたい時はこう:

ALTER TABLE students
ALTER COLUMN age TYPE BIGINT;

重要ポイント: 既にデータが入ってる場合、PostgreSQLは新しい型に変換できるかチェックするよ。無理ならエラーになる。

例えば、descriptionカラムをVARCHAR(100)で作ったけど、コースの説明がもっと長くなる場合は、データ型をTEXTに変えよう:

ALTER TABLE courses
ALTER COLUMN description TYPE TEXT;

これでコース説明を好きなだけ長く書ける!

カラム名のリネーム

カラム名を変えたい時は、RENAME COLUMNを使う:

ALTER TABLE students
RENAME COLUMN name TO full_name;

これでnameカラムがfull_nameに変わるよ。

テーブル名のリネーム

テーブル自体の名前も変えられる。RENAME TOを使うよ:

ALTER TABLE students
RENAME TO university_students;

これでstudentsテーブルがuniversity_studentsになる。

NOT NULL制約の追加・削除

カラムを作ったけど必須(NOT NULL)にするのを忘れた場合も大丈夫!あとから制約を追加できる:

ALTER TABLE students
ALTER COLUMN name SET NOT NULL;

NOT NULL制約を外したい時は、DROP NOT NULLを使おう:

ALTER TABLE students
ALTER COLUMN name DROP NOT NULL;

デフォルト値の設定

既存カラムにデフォルト値を設定したい時は、SET DEFAULTを使う:

ALTER TABLE enrollments
ALTER COLUMN enrollment_date SET DEFAULT CURRENT_DATE;

デフォルト値を消したい時はこう:

ALTER TABLE enrollments
ALTER COLUMN enrollment_date DROP DEFAULT;

それぞれのコマンドについては、次の3つのレクチャーで詳しく解説するから、楽しみにしててね :)

ALTER TABLEでよくあるミス

ALTER TABLEを使う時にありがちなエラーを紹介するよ:

今のデータと互換性のないデータ型に変更しようとする。 例えば、ageカラムに既にデータが入ってて、それをVARCHARに変えようとするとエラーになる。対策は、先にデータを消すか変換しよう。

外部キーやインデックスとして使われてるカラムを削除しようとする。 PostgreSQLはデータの整合性を守るため、これを許してくれない。依存してるカラムを消す前に、関連を削除しよう。

シンタックスエラー。 ALTER TABLEは柔軟だけど、シンタックスは正確じゃないとダメ。例えばADD COLUMNにはデータ型が必須だよ。

実際のシーンでの使いどころ

現場ではALTER TABLEはめっちゃよく使う。例えば:

  • 既存テーブルに新しいデータ(カラム)を追加する時;
  • データベースを最適化したい時(例えばデータ型を変えてメモリ節約したい時);
  • 設計ミスを直したい時(最初に制約を忘れたとか、データ型を間違えたとか)。

これでALTER TABLEコマンドがどれだけ強力かわかったよね。プロジェクトの変化に対応できる便利なツールだよ。ただし、焦らず慎重にやろう。うっかり「家」(テーブル)を壊しちゃわないように、新しい部屋を増築する時は気をつけて!

1
アンケート/クイズ
テーブル作成の基礎、レベル 17、レッスン 4
使用不可
テーブル作成の基礎
テーブル作成の基礎
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION