Oracle Database 表の作成

f:id:monozukuri-bu:20190816152328j:plain

みちです。
Oracle Databaseの表の作成について、勉強していきたいと思います。

スキーマ

 データの論理構造の集合で、ユーザーごとに1つのスキーマを持っています。
各ユーザーが作成したオブジェクトは、作成したユーザーのスキーマに格納されます。

別のユーザーが所有しているオブジェクトを参照する方法

スキーマ名.オブジェクト名

オブジェクトの命名規則

・使用できるの文字は英数字、漢字、ひらがな、カタカナ、記号「_」、「#」、「$」
・先頭の文字は数字、記号以外
・アルファベットの大文字・小文字は区別されない
・長さは30バイト以下
・同一のスキーマ内で重複する名前は指定できない
予約語は使用できない

表の作成

CREATE TABLE [スキーマ名.]表名
(
    列名 データ型
    [, 列名 データ型]
);

DEFAULTオプション

 表の作成したときにデフォルト値を指定することが出来ます。

列名 データ型 [DEFAULT 式]

表の削除

 表を削除すると表内のすべてのデータと定義されている制約、索引が削除されます。しかし、ビューとシノニムは削除されません。
DROP TABLE文を実行すると、表はゴミ箱へ移動します。完全に削除したい場合は、PURGE句を指定します。
DROP ANY TABLE権限を持っているユーザーか、表の所有者でないと削除することが出来ません。

DROP TABLE 表名 [PURGE];

データ型

分類 データ型の例
文字型 CHAR
VARCHAR2
LONG
CLOB
数値型 NUMBER
日付型 DATE
バイナリ型 RAW
LONG RAW
BLOB
BFILE
ROWID ROWID

文字型

 CHAR型は固定長であり、VARCHAR2型は可変長です。
そのため、CHAR(5)に「abc」という文字列を指定した場合、5バイトの扱いなります。
また、VARCHAR(5)に「abc」という文字列を指定した場合、3バイトの扱いとなります。

数値型

列名 NUMBER[(最大精度[,位取り])]

NUMBER(6, 3)に定義されている列に123.4567を指定した場合、
全体で6桁、整数部分は三桁、小数点以下が第3位までであるため、
小数点第4位の7が四捨五入で繰り上がり、123.457となります。

日付型

 日付型のデータのサイズは固定長であり、7バイトです。

列名 DATE

バイナリデータ型

 RAW型、LONG RAW型、BLOB型、BFILE型の四種類です。

列名 RAW(最大サイズ)
列名 LONG RAW
列名 BLOB
列名 BFILE

ROWID型

 各行に割り当てられている一意なアドレスです。
ROWIDをSELECTで取得する場合は*では取れないため、明記する必要があります。

列名 ROWID

TIMESTAMP型

 DATE型を拡張したデータ型です。年月日時分秒と秒の小数点以下の値を格納することが出来ます。
小数点以下の桁数を指定することができ、デフォルト値は6です。

列名 TIMESTAMP[(小数点以下の桁数)]

INTERVAL YEAR TO MONTH型

 2つの日付と時刻の間隔を年及び月の単位で格納します。

INTERVAL DAY TO SECOND型

 2つの日付と時刻の間隔を日時分秒の単位で格納します。

制約の定義

 制約は列または表レベルで定義することが出来ます。
制約名を省略すると、制約名は「SYS_Cn」となります。

制約の種類

種類
PRIMARY KEY制約(主キー制約)
FOREIGN KEY制約(外部キー制約)
CHECK制約
NOT NULL制約
UNIQUE制約(一意制約)

PRIMARY KEY制約

 表内の各行を一意に識別できる値のみ許可されています。重複値とNULL値は許可されていません。
この制約は表に一つしか定義することが出来ません。

FOREIGN KEY制約

 参照先の列にある値またはNULL値は許可されています。
子表内に親表を参照する行が存在する場合、親表の参照されている行を削除することが出来ません。
また、FOREIGN KEY制約を定義すると親表は削除することが出来ません。
削除する場合は子表から削除する必要があります。

CHECK 制約

 条件に合う値のみ許可されています。条件に合わない値の場合はエラーとなります。

NOT NULL制約

 NULL値は許可されません。列レベルで定義することが出来ます。

UNIQUE制約

 重複した値は許可されません。NULL値は許可されています。
列の組み合わせにUNIQUE制約を定義する場合、表レベルの制約を使う必要があります。
その場合、組み合わせで一意であれば良いため、1つの列で同じ値でも他の列で異なる値が入っていればデータを登録することが出来ます。

副問合せを使用した表の作成

 列名の指定は省略することが出来ます。
その場合、副問合せでSELECT句で指定された列名と同じ名前の列が定義されます。

列名を指定する場合、副問合せのSELECT句と同じ個数の列名を指定する必要があります。
NOT NULL以外の制約はコピーされません。

暗黙的にNOT NULL制約がつくPRIMARY KEY制約もNOT NULL制約が付与されません。
副問合せのSELECT句で計算式や関数を使用している場合、列別名を指定する必要があります。

ALTER TABLE

ALTER TABLE 表名 {READ WRITE | READ ONRY};

READ WRITE

 表のデータを変更することが出来ます。読み取り、書き込みモード。

READ ONRY

 表のデータを変更することが出来ません。表自体の削除だけ可能です。読み取りモード。

まとめ

 今回は表の作成について勉強しました。 細かいところも含めてしっかりと覚えておく必要があると感じました。