MENU
OS
データベース
プログラミング
フリーウェア
SEの為の業務知識





 SQL  

テーブル操作

テーブル操作

   テーブルの作成 ORACLE/SQL SERVER

  • 通常

    CREATE TABLE skimar.table1(
       field1   VARCHAR2(10)  PRIMARY KEY,
       field2   CHAR (5),
       field3   NUMBER (9,0)
    )

    ※skimar.table1 :任意のスキーマ名とテーブル名

  • テーブルスペースも指定

    CREATE TABLE skimar.table1(
       field1   VARCHAR2(10)  PRIMARY KEY,
       field2   CHAR (5),
       field3   NUMBER (9,0)
    )
    TABLESPACE tablespace1

  • 複合主キーの指定

    CREATE TABLE skimar.table1(
       field1   VARCHAR2(10),
       field2   CHAR (5),
       field3   NUMBER (9,0),
       CONSTRAINT pk_table1 PRIMARY KEY(field1,field2) USING INDEX TABLESPACE tablespace1
    )
    TABLESPACE tablespace1

   テーブルのコピー作成 ORACLE/SQL SERVER

    CREATE TABLE skimar.table2 as
       SELECT * FROM skimar.table1

      ※テーブル構造とレコードをコピー
       整合性規則(primary key等)はコピーされない(追加する場合alter tableが必要)

   テーブルの変更 ORACLE/SQL SERVER/DB2

  • 項目の追加[ORACLE/SQL SERVER]

    ALTER TABLE skimar.table1 ADD(
       field4   VARCHAR2(10),
       field5   CHAR (5),
       field6   NUMBER (9,0)
    )

  • 項目の追加[DB2]

    ALTER TABLE skimar.table1 ADD COLUMN field4 VARCHAR2(10)

  • 項目長の変更[ORACLE/SQL SERVER]

    ALTER TABLE skimar.table1 MODIFY(
       field1   VARCHAR2(7)
    )

  • 項目長の変更[DB2]

    ALTER TABLE skimar.table1 ALTER COLUMNE field1 SET DATA VARCHAR2(7)

  • 主キーの追加

    ALTER TABLE skimar.table1 ADD PRIMARY KEY (
       field1,
       field2
    )

   テーブルの削除 ORACLE/SQL SERVER

    DROP TABLE skimar.table1

   デフォルト表領域の変更 ORACLE

  • ALTER USER ユーザ名 DEFAULT TABLESPACE 表領域名

    ALTER USER scott DEFAULT TABLESPACE tablespace1


   テーブルの表領域移動 ORACLE

  • ALTER TABLE テーブル名 MOVE TABLESPACE 移動先表領域名

    ALTER TABLE table1 MOVE TABLESPACE tablespace1

   ビューの作成 ORACLE

    CREATE VIEW skimar.view1 AS SELECT
         field1,
         table2.field2 AS field2,
         table3.field3 AS field3,
         FROM skimar.table1, skimar.table2, skimar.table3
         WHERE table1.field2 = table2.field2 (+)
         AND table1.field3 = table3.field3 (+)

     ※例では3個のテーブルを結合したビュー

   ビューの削除 ORACLE

    DROP VIEW skimar.view1


   テーブルの名前変更 ORACLE

    RENAME 変更前テーブル名 TO 変更後テーブル名


   索引の作成 ORACLE

  1. 重複不可の索引(UNIQUE を指定すると重複不可となる)

    CREATE UNIQUE INDEX キー名 ON skimar.table1(
        field1,
        field2
    )

  2. 重複可の索引

    CREATE INDEX キー名 ON skimar.table1(
        field1,
        field2
    )

   索引の削除 ORACLE

    DROP INDEX キー名

   索引の表領域移動 ORACLE

  • ALTER INDEX インデックス名 REBUILD TABLESPACE 移動先表領域名

    ALTER INDEX index1 REBUILD TABLESPACE tablespace1

   PRIMARY KEY 項目の変更 ORACLE

  1. PRIMARY KEY項目の削除

      ALTER TABLE テーブル名 DROP CONSTRAINT プライマリーキー名 CASCADE

      ALTER TABLE table1 DROP CONSTRAINT pk_table1 CASCADE

  2. PRIMARY KEY項目の追加

      ALTER TABLE テーブル名 ADD CONSTRAINT プライマリーキー名 PRIMARY KEY( キー項目1,キー項目2,・・・)

      ALTER TABLE table1 ADD CONSTRAINT pk_table1 PRIMARY KEY( key1,key2,key3)

  3. PRIMARY KEY項目の表領域移動

      ALTER INDEX プライマリーキー名 REBUILD TABLESPACE 移動先表領域名

      ALTER INDEX pk_table1 REBUILD TABLESPACE tablespace1

   コメントの追加 ORACLE

  • テーブルのコメント追加

    COMMENT ON TABLE テーブル名 IS 'コメント文(論理テーブル名)')

  • カラムのコメント追加

    COMMENT ON COLUMN カラム名 IS 'コメント文(論理カラム名)')

   NOT NULL制約に変更 ORACLE

  • ALTER TABLE 対象テーブル名 MODIFY(対象項目 NOT NULL)

    ALTER TABLE table1 MODIFY(code1 NOT NULL)

   デフォルトの日付データ表示の変更 ORACLE

  • デフォルトの日付データ(年、月、日のみの表示)の変更はNLS_DATE_FORMATセッションパラメータを変更して行う

    SQL> ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS';

    セッションが変更されました。

    SQL> SELECT SYSDATE FROM dual;

    SYSDATE
    --------------------
    2005-11-15 01:00:00

   ソートエリアの変更 ORACLE

  • ソートエリアはソートが発生するような処理をユーザーが行ったときにメモリに割り当てられ、SORT_AREA_SIZE で
    指定したサイズがその最大値になる
    ユーザープロセスがソート処理のために利用できるメモリー(ソートエリア)のサイズをバイト単位で指定

    /* データベースを再起動せず現行セッションだけに有効 */
    ALTER SESSION SET SORT_AREA_SIZE=1000000;

  • ソートエリアの確認用SELECT文

    /* ソート領域 */
    /* sorts (rows)はソート行数 */
    /* sorts (disk)は一時セグメントへのI/Oを必要とするソート回数 */
    /* sorts (memory)は完全にメモリ内で実行されたソート回数 */

    SELECT
      a.value sorts_rows,
      b.value sorts_disk,
      c.value sorts_memory,
      ROUND(100*b.value / (b.value+c.value), 3) "DISK_SORT_RATIO"
    FROM
      v$sysstat a,
      v$sysstat b,
      v$sysstat c
    WHERE
      a.name = 'sorts (rows)'
      and b.name = 'sorts (disk)'
      and c.name = 'sorts (memory)';

   表のロック ORACLE

  • 指定された表にロックをかけ、他からのアクセスを制限する。(COMMIT命令の発行で解除)

    LOCK TABLE ロックするテーブル名 IN ロックモード MODE [NOWAIT]

    LOCK TABLE table1 IN EXCLUSIVE MODE NOWAIT;

    ◆ ロックモードの説明 ◆

    • ROW SHARE(行共有表ロック)
      ロックされた表への並行アクセスが可能で、排他的アクセスのために表全体をロックするのを防ぐ

    • ROW EXCLUSIVE(行排他表ロック)
      同じ行への排他的ロック

    • SHARE UPDATE(行共有表ロック)
      ROW SHARE同様

    • SHARE(共有表ロック)
      他のトランザクションもロック

    • SHARE ROW EXCLUSIVE(共有行排他表ロック)
      1つのトランザクションだけをロック(FOR UPDATE句を使用したSELECT文で他のトランザクションがロック)

    • EXCLUSIVE(排他表ロック)
      ロックしたトランザクションのみが書き込むことができる。最も制限的なモード

   シーケンステーブルのシーケンス番号を指定する番号から再開 DB2

    ALTER SEQUENCE シーケンステーブル名 RESTART WITH 再開させる番号

  • seqtable1シーケンスを100から再開

    ALTER SEQUENCE seqtable1 RESTART WITH 100

   トリガーの開始と停止 ORACLE

  • トリガーの停止

    ALTER TRIGGER trigger1 ENABLE

  • トリガーの開始

    ALTER TRIGGER trigger1 DISABLE
[トップページへ] [戻る]

Copyright(c)2007-2008 Freedom.Net Co., Ltd. All rights reserved.