SAK 図書館
SQL 基礎実地編 (その二) テーブル削除、クリア、定義変更、名前変更、権限
■テーブル削除
・テーブルを削除すると、付随する index も自動的に削除される。
テーブル中のデータだけでなく、項目定義など、全て削除されるので注意す
ること。
drop table sak.テストm;
■テーブルクリア
・テーブル中のデータだけを全て削除するには、delete 文を使用する。
delete from sak.テストm;
・但し、単純クリアが目的なら、この方法はレスポンス的に問題がある。
トランザクション機能が働くので、全レコードのトランザクションバッファ
への書き込みとコミットによる更新が行われる。
何万件にも及ぶデータのクリアを delete 文でやると実用に耐えない。
・単純なテーブルクリアが目的の場合は、表切り捨て(truncate) を使用する
と良い。この方が一瞬でクリアできる。
truncate table sak.受注m;
・思いきって、テーブル削除と再作成を利用する手もある。
drop table sak.テストm;
create table sak.テストm (
キー char (008) primary key,
データ1 number (009, 0),
データ2 number (009, 0),
データ3 number (009, 0)
) STORAGE(INITIAL 100M NEXT 20M MAXEXTENTS 99);
■テーブル定義変更(テーブル属性変更、列定義変更)
・データ項目の桁数が足りなくなったり、新たな項目を追加するのは alter
文で簡単に行える。但し、項目の削除はできない。
(最近の Oracle では、列削除が行える。)
項目の削除を行うには、
データ退避
テーブル削除
テーブル再作成
新形式にデータ編集
データセットアップ
を行う必要がある。
・新たにテーブルに項目を追加(列の追加、フィールド追加、カラム追加)
するには、次のようにする。
alter table sak.テストm add (
新項目1 number (009, 0),
新項目2 varchar2(005)
);
・最近の Oracle は列の削除が行える。
alter table testm drop (
削除項目1,
削除項目2
);
・既存のテーブル項目を変更するには(列変更)、次のようにする。
但し、項目タイプの変更や桁数を少なくする場合は、該当項目にデータが
セットされているとエラーになる場合がある。
update 文で、該当項目を NULL にしたり、桁調整するか、
データ退避
テーブル削除
テーブル再作成
新形式にデータ編集
データセットアップ
を行う必要がある。
alter table sak.テストm modify (
データ1 varchar2(020)
);
■整合性制約定義、リレーション、リファレンス、外部キー
・データ項目に他のテーブルとのリレーションをとって、制約条件などを設定
することができる。(constraints)
制約追加は、create table 時、または、alter table で行う。
create table sak.テストm (
キー char (008) primary key,
データ1 number (009, 0)
constraint テストm_データ1_ct1 not null
constraint テストm_データ1_ct2 check(受注数 >= 0),
データ2 number (009, 0),
データ3 number (009, 0)
);
・列制約には、
primary key 主キー制約(unique & not null)
unique 一意キー制約(ユニーク項目、一意制約、ユニーク値、ユニークキー、ユニーク制約)
not null NOT ヌル制約
check チェック制約
references 参照整合性制約(参照制約、外部整合性制約、外部制約キー)
がある。
alter table sak.テストm
add constraint テストm_受注数 not null 受注数
;
alter table sak.テストm
add constraint テストm_受注数 check(受注数 >= 0)
;
alter table sak.テストm
add constraint テストm_キー_fk
foreign key (キー) references マスタm (キー)
;
・制約の削除は、次のようにする。
alter table sak.テストm
drop constraint テストm_受注数
;
・制約の参照は、次のようにする。(列制約表示、列制約確認)
select substr(a.table_name, 1, 16), substr(b.column_name, 1, 16),
a.constraint_name, a.constraint_type
from user_constraints a, user_cons_columns b
where a.table_name = b.table_name (+)
and a.constraint_name = b.constraint_name (+)
and a.table_name = '受注M'
;
■名前変更(テーブル名変更)
・テーブル、ビュー、その他オブジェクトの名前を変更するには、rename 文
を使用する、
rename sak.テストm to sak.あいうえおm;
■スキーマ作成
・スキーマ(schema) は、ユーザを作成すると自動的に作られる。
(ユーザ追加、スキーマ生成)
create user testscm
identified by testpw
default tablespace USER_DATA
temporary tablespace TEMPORARY_DATA
quota unlimited on USER_DATA
;
・スキーマ(schema) の容量を限定することもできる。
create user testscm
identified by testpw
default tablespace USER_DATA
temporary tablespace TEMPORARY_DATA
quota 10M on USER_DATA
;
■スキーマ削除
・スキーマ(schema) は、ユーザを削除することで行う。
drop user testscm;
・cascade を指定すると、user が所有していたオブジェクトも削除される。
drop user testscm cascade;
■システム権限付与
・スキーマ(schema) やオブジェクトに個別に権限を付与することができるが、
一般的にはロールを使用する。
権限関係はシビアな問題なので、マニュアルをよく見て、システムに適切な
セキュリティが保てるように設計すること。
(ユーザ権限、テーブルアクセス制限)
grant CREATE SESSION to testscm;
grant CREATE SESSION to testscm with admin option;
revoke CREATE SESSION from testscm;
・ロール作成、権限付与、権限取消、権限確認
create role alluser;
grant CREATE SESSION to alluser;
revoke CREATE SESSION from alluser;
select * from role_sys_privs where role = 'ALLUSER';
・スキーマへのロール付与、ロール取消、ロール確認
grant alluser to testscm;
revoke alluser from testscm;
select * from user_role_privs;
■レプリケーション(レプリカ)、パラレル、分散データベース、クラスタ
・パフォーマンス向上や複数データベース分散など、色々な機能がある。
レプリケーションは他のデータベースと同期をとる。更新を含むレプリケー
ションはけっこうやっかいである。
パラレルは複数のインスタンスで同一データベースにアクセスする。
複数のサーバで更新できるので、パフォーマンスは高くなる。
分散データベースは、複数のデータベース中のオブジェクトを結合して
論理的な 1 データベースのように扱う。
うまく設計すれば、非常に高いパフォーマンスを得ることができる。
・Oracle8 から、クラスタ構成がとれる。複数のサーバデータベースをひとつ
のデータベースのように扱い、障害時に停止しない運用が可能である。
■SQL 基礎実地編資料
■SQL 基礎編資料
■SQL チューニング編資料
■Oracle PL/SQL 編資料
■PostgreSQL 編、JAVA Servlet、JSP 編資料
■MySQL 編資料