ALTER TABLEとは
SQLのALTER TABLE文は既存のテーブル構造を変更できるクエリです。このクエリには、いくつか従属的なサブフォームがあります。
ALTER TABLE文でできること
テーブル/カラム/インデックスの名称変更
カラム定義の変更
カラム/インデックスの追加
カラム / インデックスの削除
テーブル構造を変更する場合は、ALTER TABLE文と構造を変更するテーブル名の指定後に、指示句と変更内容を記述します。
【サンプルテーブル】
「ALTER TABLE」文の具体的な使い方を解説していくにあたって、サンプルとして「テスト(test)」テーブルを用意しました。
「テスト(test)」テーブル
ID(id) | 氏名(name) | 性別(gender) | 点数(point) |
1001 | 秋山 | 男 | 80 |
1002 | 久保田 | 女 | 100 |
1003 | 佐々木 | 女 | 65 |
1004 | 佐藤 | 男 | 75 |
1005 | 鈴木 | 女 | 60 |
1006 | 田中 | 男 | 90 |
1007 | 土屋 | 女 | 55 |
テーブル/カラム/インデックスの名称変更
ALTER TABLE文にRENAMEオプションを使用することで、テーブル名/カラム名/インデックスの名称を変更できます。
テーブル名の変更
変更対象のテーブル名の後ろにRENAME TO句を記述し、続いて新しいテーブル名を指定します。
【基本構文】
ALTER TABLE テーブル名 RENAME TO 新しいテーブル名;
ただ、該当テーブルを参照するビューやプログラムがある場合はそれらに影響があるので注意が必要です。ALTER TABLE文の実行前に影響先を確認しておくことが重要です。
カラム名の変更
変更対象のカラム名を変更する場合はRENAME COLUMN句を記述し、続いてカラム名 TO 新しいカラム名という形式で指定します。
【基本構文】
ALTER TABLE テーブル名 RENAME COLUMN カラム名 TO 新しいカラム名;
サンプルテーブルを用いてカラム名を変更します。「ID」カラム名を「id」から「student_id」に変更します。
【実行コード】
ALTER TABLE test RENAME COLUMN id TO student_id;
【実行結果】
Field | Type | Null | Key | Default | Extra |
student_id | int | NO | PRI | NULL | |
name | varchar | YES | NULL | ||
gender | varchar | YES | NULL | ||
point | int | YES | NULL |
上記のように、カラム名が変更されました。
ID(student_id) | 氏名(name) | 性別(gender) | 点数(point) |
1001 | 秋山 | 男 | 80 |
1002 | 久保田 | 女 | 100 |
1003 | 佐々木 | 女 | 65 |
1004 | 佐藤 | 男 | 75 |
1005 | 鈴木 | 女 | 60 |
1006 | 田中 | 男 | 90 |
1007 | 土屋 | 女 | 55 |
インデックス名の変更
変更対象のインデックス名を変更する場合はRENAME INDEX句を記述し、続いてインデックス名 TO 新しいインデックス名という形式で指定します。
【基本構文】
ALTER TABLE テーブル名 RENAME INDEX インデックス名 TO 新しいインデックス名;
カラム/インデックスの追加
ALTER TABLE文にADDオプションを使用することで、テーブルにカラム/インデックスを追加できます。
カラムの追加
テーブルにカラムを追加する場合はADD COLUMN句を記述し、続いて「追加するカラム名 データ型」という形式で指定します。
カラムを追加する位置を指定する場合は、追加する位置をクエリの最後に付け加えます。位置を指定しない場合は、テーブルの後ろの位置に追加されます。
【基本構文】
ALTER TABLE テーブル名 ADD COLUMN 追加するカラム名 データ型;
/* テーブルの先頭に追加する場合 */
ALTER TABLE テーブル名 ADD COLUMN 追加するカラム名 データ型 FIRST;
/* カラム「id」の後ろに追加する場合 */
ALTER TABLE テーブル名 ADD COLUMN 追加するカラム名 データ型 AFTER id;
サンプルテーブルを用いて「合否(pass/fail)」カラムを追加します。
【実行コード】
ALTER TABLE test ADD COLUMN pass/fail varchar;
【実行結果】
Field | Type | Null | Key | Default | Extra |
student_id | int | NO | PRI | NULL | |
name | varchar | YES | NULL | ||
gender | varchar | YES | NULL | ||
point | int | YES | NULL | ||
pass/fail | varchar | YES | NULL |
上記のように、カラム名が追加されました。
ID(id) | 氏名(name) | 性別(gender) | 点数(point) | 合否(pass/fail) |
1001 | 秋山 | 男 | 80 | |
1002 | 久保田 | 女 | 100 | |
1003 | 佐々木 | 女 | 65 | |
1004 | 佐藤 | 男 | 75 | |
1005 | 鈴木 | 女 | 60 | |
1006 | 田中 | 男 | 90 | |
1007 | 土屋 | 女 | 55 |
インデックスの追加
テーブルにインデックスを追加する場合はADD INDEX句を記述し、続いて「追加するカラム名 定義」という形式で指定します。
【基本構文】
ALTER TABLE テーブル名 ADD INDEX 追加するインデックス名 定義;
/* インデックスの先頭に追加する場合 */
ALTER TABLE テーブル名 ADD COLUMN 追加するインデックス名 定義 FIRST;
/* インデックス[id]の後ろに追加する場合 */
ALTER TABLE テーブル名 ADD COLUMN 追加するインデックス名 定義 AFTER id;
カラム/インデックスの削除
カラムを削除する場合はDROP COLUMN句を記述し、続いて「削除するカラム名」という形式で指定します。
カラムの削除
【基本構文】
ALTER TABLE テーブル名 DROP COLUMN カラム名;
サンプルテーブルを用いて「性別(gender)」カラムを追加します。
【実行コード】
ALTER TABLE test DROP COLUMN gender;
【実行結果】
Field | Type | Null | Key | Default | Extra |
student_id | int | NO | PRI | NULL | |
name | varchar | YES | NULL | ||
point | int | YES | NULL |
上記のように、指定したカラムが削除されました。
ID(id) | 氏名(name) | 点数(point) |
1001 | 秋山 | 80 |
1002 | 久保田 | 100 |
1003 | 佐々木 | 65 |
1004 | 佐藤 | 75 |
1005 | 鈴木 | 60 |
1006 | 田中 | 90 |
1007 | 土屋 | 55 |
インデックスの削除
インデックスを削除する場合は、DROP INDEX句を記述し、続いて「削除するインデックス名」という形式で指定します。
【基本構文】
ALTER TABLE テーブル名 DROP INDEX インデックス名;
カラム定義の変更
カラムの定義を変更する場合はMODIFY COLUMN句を記述し、続いて「カラム名 データ型 制約」という形式で指定します。
【基本構文】
ALTER TABLE テーブル名 MODIFY COLUMN カラム名 データ型 制約;
カラム名と定義の変更を同時に行う場合はCHANGE COLUMN句を記述し、続いて「カラム名 新しいカラム名 データ型 制約」という形式で指定します。
【基本構文】
ALTER TABLE テーブル名 MODIFY COLUMN カラム名 データ型 制約;
サンプルテーブルを用いて「性別(gender)」カラムの定義を変更します。
【実行コード】
ALTER TABLE test MODIFY COLUMN gender int;
【実行結果】
Field | Type | Null | Key | Default | Extra |
student_id | int | NO | PRI | NULL | |
name | varchar | YES | NULL | ||
gender | int | YES | NULL | ||
point | int | YES | NULL |
上記のように、指定したカラムの定義が変更されました。
SQL関連記事
- RDBを操作するデータベース言語「SQL」とは?
- RDB以外のデータベース管理システム「NoSQL」とは?
- RDB管理システム「MySQL」とは?
- RDB管理システム「PostgreSQL」とは?
- RDB管理システム「SQL Server」とは?
- RDB管理システム「SQLite」とは?
- ブラウザ上でMySQLを管理できる「phpMyAdmin」とは?
- データを抽出する「SELECT」文
- データを追加する「INSERT」文
- データを削除する「DELETE」文
- データを更新する「UPDATE」文
- テーブル構造を変更する「ALTER TABLE」文
- 抽出条件を指定する「WHERE」句
- 抽出条件を指定する「HAVING」句
- 複数の抽出条件をまとめる「IN」句
- 重複レコードを除外する「DISTINCT」
- 抽出範囲を指定する「BETWEEN」演算子
- 抽出条件を満たすレコードの存在の有無を調べる「EXISTS」句
- レコード件数を取得する集計関数「COUNT」関数
- 文字列を切り出す「SUBSTRING」関数
- レコードをグループ化する「GROUP BY」句
- 抽出結果を並び替える「ORDER BY」句
- テーブル間のデータを結合する「JOIN」句
- 内部結合「INNER JOIN」句
- 抽出結果を統合して表示する「UNION」句
- データの曖昧検索「LIKE」句
- データの取得件数を制限する「LIMIT」句
- 条件分岐処理「CASE」式
- 「NULL」の扱い方
- 「主キー」とは?
- 「外部キー」とは?
SQLの勉強方法は?
書籍やインターネットで学習する方法があります。昨今では、YouTubeなどの動画サイトやエンジニアのコミュニティサイトなども充実していて多くの情報が手に入ります。
そして、より効率的に知識・スキルを習得するには、知識をつけながら実際に手を動かしてみるなど、インプットとアウトプットを繰り返していくことが重要です。特に独学の場合は、有識者に質問ができたりフィードバックをもらえるような環境があると、理解度が深まるでしょう。
ただ、SQLに限らず、ITスキルを身につける際、どうしても課題にぶつかってしまうことはありますよね。特に独学だと、わからない部分をプロに質問できる機会を確保しにくく、モチベーションが続きにくいという側面があります。独学でモチベーションを維持する自信がない人にはプログラミングスクールという手もあります。費用は掛かりますが、その分スキルを身につけやすいです。しっかりと知識・スキルを習得して実践に活かしたいという人はプログラミングスクールがおすすめです。
プログラミングスクールならテックマニアがおすすめ!
ITスキル需要の高まりとともにプログラミングスクールも増えました。しかし、どのスクールに通うべきか迷ってしまう人もいるでしょう。そんな方にはテックマニアをおすすめします!これまで多くのITエンジニアを育成・輩出してきたテックマニアでもプログラミングスクールを開講しています。
<テックマニアの特徴>
・たしかな育成実績と親身な教育 ~セカンドキャリアを全力支援~
・講師が現役エンジニア ~“本当”の開発ノウハウを直に学べる~
・専属講師が学習を徹底サポート ~「わからない」を徹底解決~
・実務ベースでスキルを習得 ~実践的な凝縮カリキュラム~
このような特徴を持つテックマニアはITエンジニアのスタートラインとして最適です。
話を聞きたい・詳しく知りたいという方はこちらからお気軽にお問い合わせください。