Oracle
投稿者:
Aki
投稿日時:2005-06-04 - 16:08:20
カテゴリー:
Oracle -
トラックバック(No Trackbacks)
Oracleの授業@6/4
今日は制約構文の復習等なのです。
・列制約構文
・表制約構文
※制約の文によっては、列制約構文でしか書けないもの、表制約構文でしか書けないものがある。
エンティティ整合性制約
・単体に制約をつける
フォーリンキー(ForeignKey)制約
・関係に制約をつける
=エンティティ整合制約=
Not Null制約については
・「列制約構文」でしか書けない
・Alter table modifyを使わなければならない
Unique制約
・ユニークなので重複不可
・NullはOK許す!
PrimaryKey制約
・Not Null制約とUnique制約両方がくっつく。
・必ず値が入る(何もなしはだめ)
・そして重複不可
二つのフィールドでひとつの制約を使うときは
「表制約構文」を使わなければならない
Check制約
・擬似列の参照が使えない
・関数の仕様が使えない
=フォーリン(外部)キー制約=
フォーリンキー制約をつける場合、親の表がないと
フォーリンキー制約をつけることができない。
P.333~
フォーリンキー制約で関係付け済み
親を削除しようとすると子が参照してる可能性がある場合、
エラーになる。
回避するためには二つのやり方がある。
1.フォーリンキー制約をつける段階(表を作る時)でオプションをつける
on delete cascade
on delete set null
この二つがある。
・「on delete cascade」を指定した場合
親を消そうとすると、関係した子のデータも一緒に消える。
(子のデータ一列消える)
・「on delete set null」を指定した場合
親を消そうとすると、関係した子のデータの参照部分が
Nullになる。
(参照したフィールドのみNullになる)
P.336~
2.制約の削除
参照するフォーリンキー制約を削除する
・「cascade」オプションをつけると、
プライマリーキー制約を削除すると共に、子の表のフォーリンキー制約も
削除する。
P.340~
おまけ
3.列削除
列削除などの制約のカスケード
親の表のプライマリーキー制約のある列を削除する。(列自体を削除)
子の表の制約も削除する。(制約を削除)
alter table 表名 drop (列名) cascade contents
P.304~
4.表の削除
表を消してしまおう。子の表のフォーリンキー制約も削除する。
drop table 表名 cascade contents
これによって表を消したときに相手の制約も消す。
P.338~
5.制約を無効/有効にすることができる。
disable/enableを使って一時的に無効/有効にすることができる。
注意点
いったん無効にしたものを有効にするとき、表の中の値が
すべて制約に適合しないといけない。
View表の使い方
表の中で例えば、EMP表を見せてしまうと、
給料まで見えてしまう(´A')ボクの月給150万円。みたいな。
それは困るので、見ることができるフィールドを
ピックアップして新たなViewを作ろう。
ビュー表にはEMPNOとENAMEを用意しよう。
ビュー表は新たな表を作らずに、元からある表を
参照しているだけなので、ビュー表の中身を変更しなくても、
EMP表を更新すれば、ビュー表の一覧も変わるだけである。
二つの表からビューを作成することもできる。
一つの表から作ると単一ビュー
複数の表から作ると複合ビュー(だと思う)
ぁあ、なんか適当になってきた。
create view どーたらこーたら
>set pages 50
>set lines 100
>/
ビューの作り方
・create view ビュー名 as select文
>create view vemp as select empno,ename,deptno from emp;
>select * from vemp;
結果が出てくる。
>update emp set ename = 'oshima' where empno = 7782;
オリジナルを変更してみる。
>select * from vemp;
ビュー表の結果も変わっている。
>update vemp set ename = 'nobuyuki' where empno = 7788;
ビュー表から元を更新
>select * from emp;
オリジナル表が変更されている。
眠いので後は各自ヨロ
Comments
Add Comments
Trackback
トラックバック
このエントリにトラックバックはありません
この
トラックバックURLを使ってこの記事にトラックバックを送ることができます。
もしあなたのブログがトラックバック送信に対応していない場合には
こちらのフォームからトラックバックを送信することができます。.