目次へ

3.2. テーブルの変更<ALTER TABLE>

テーブルの変更は ALTER TABLE 文で行います。既存のテーブルの定義を変更します。ALTER TABLE は次の機能を備えています。

  • テーブルに列を追加する
  • テーブルから列を削除する
  • テーブルにテーブル制約を追加する
  • テーブルからテーブル制約を削除する
  • 列にデフォルト値を追加する
  • 列からデフォルト値を削除する

テーブル制約 (CONSTRAINT) とは、テーブルの列に入力できる値を制限するテーブル定義の一部のことです。具体的にどのように制約するのかについては後述します。また、デフォルト値とは、テーブルへの INSERT INTO 文に列の値が指定されなかった場合に、そのテーブルの列に自動的に挿入される値のことです。

ALTER TABLE 文の構文は次の通りです。

  /*列の追加*/
    ALTER TABLE テーブル名 ADD [COLUMN] 列名 データ型 ;

  /*列を削除*/
    ALTER TABLE テーブル名 DROP [COLUMN] 列名
          [ RESTRICT | CASCADE ] ;

  /*テーブル制約の追加*/
    ALTER TABLE テーブル名 ADD テーブル制約の定義 ;

  /*テーブル制約の削除*/
    ALTER TABLE テーブル名 DROP CONSTRAINT テーブル制約の定義
          [ RESTRICT | CASCADE ] ;

  /*デフォルト値の追加*/
    ALTER TABLE テーブル名
          ALTER [COLUMN] 列名 SET DEFAULT デフォルト値 ;

  /*デフォルト値の削除*/
    ALTER TABLE テーブル名 ALTER [COLUMN] 列名 DROP DEFAULT ;

上の構文の中に示した [ COLUMN ] は省略可能です。ある WEB ページの説明には、「[ COLUMN ] はノイズであり、省略可能です」と書かれていました。

[ RESTRICT | CASCADE ] とは、RESTRICT 句と CASCADE 句のいずれかを記述するという意味です。RESTRICT 句が指定された場合は、指定した表がビューや整合制約により参照されたものである場合は変更は行われません。CASCADE 句が指定された場合は、列を参照するビューは変更されず、それらは破棄されます。

受注表に納品日という列を追加したい場合には、SQL で sample.02-1 のように書きます。納品日のデータ型は固定長文字列とします。

表:受注表
受注番号 得意先コード 商品コード 受注個数
↓列の追加
表:受注表
受注番号 得意先コード 商品コード 受注個数 納品日

-- sample.02-1 --

/* 納品日列の追加*/

ALTER TABLE 受注表 ADD 納品日 CHAR(8) ;

テーブル制約を追加する例として、受注表の受注番号を主キーとする場合は sample.02-2 のように SQL を記述します。

表:受注表
受注番号 得意先コード 商品コード 受注個数

-- sample.02-2 --

/* 制約の追加 */

ALTER TABLE 受注表 ADD PRIMARY KEY(受注番号) ; 

受注テーブルの受注個数にデフォルト値 = 10 を追加する場合は sample.02-3 のように SQL では記述します。

表:受注表
受注番号 得意先コード 商品コード 受注個数
-- sample.02-3 --

/* デフォルト値の追加 */

ALTER TABLE 受注表 ALTER COLUMN 受注個数 SET DEFAULT 10 ; 

データの再定義が必要な場合に ALTER TABLE 文は必須ですが、できるだけ ALTER TABLE 文に頼らず設計することが望ましいとされています。というのは、すでに使用されているテーブルの構造を変更することは大変危険な行為であり、テーブルのビューが正しく機能しなくなる、アプリケーションが誤動作を引き起こす、機能を停止するなどの可能性があるからです。データベースの設計の段階で、現在のニーズだけでなく将来的なニーズも視野に入れてテーブルの設計に取り込み、ALTER TABLE 文はあくまでも最後の手段として利用する事が大切です。

3.3. テーブルの削除 <DROP TABLE>

テーブルの削除は、実際には 2段階のプロセスからなります。まず DELETE 文を使って、テーブルのデータを空にします。次に DROP TABLE 文を使って、テーブルの定義を破棄します。つまり、DROP TABLE は空のテーブルを削除するものであり、データを破棄するものではないということです。DROP TABLE 文の構文は次の通りです。

DROP TABLE テーブル名 [ RESTRICT | CASCADE ] ;

RESTRICT 句が指定された場合は、指定した表がビューや整合制約により参照されたものである場合は削除は行われません。CASCADE 句が指定された場合は、ビューや整合制約も削除されます。

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp