SAK 図書館

SAK Streets メインストリート 図書館・カフェ 一覧 SAK Streets 検索
| VB | SQL | Perl | PHP | ASP | JSP | C | PC | HP | FAQ | フリーソフト |

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 編資料
| VB | SQL | Perl | PHP | ASP | JSP | C | PC | HP | FAQ | フリーソフト |

SAK Streets メインストリート 図書館・カフェ 一覧 SAK Streets 検索



Copyright (C) 1999-2017 Y.SAK