(4)オラクル------制約、ビュー、およびインデックスシーケンス

1、拘束

2、ビュー

3、ビュー

4、インデックス

制約

1.制約は何ですか?
  • 表レベルの制約は必須です
  • :5つの制約がある
    NOT NULL
    UNIQUE
    PRIMARY KEY
    FOREIGN KEYの
    CHECKは、
  • あなたは制約名を指定しない場合は、Oracleサーバーは自動的にフォーマットSYS_Cnに従って制約名を割り当て
図2に示すように、テーブルレベルおよび列レベルの制約?
  • 範囲:
    ①、列レベル制約が列のみに影響を与えることができる
    ②、テーブルレベルの制約は、複数列に作用し得る(表レベルの制約はもちろん、列に作用してもよいです)

  • 定義された方法:列制約しなければならず、テーブル制約とは、列の後ろの列に定義されていないが、独立して定義されます。

  • 非空(nullでない)制約は、列に定義することができます。

3、NOT NULL制約
CREATE TABLE employees(
       employee_id  NUMBER(6),
       first_name VARCHAR2(20) NOT NULL,//系统命名
       job_id CONSTRAINT ji_nn NOT NULL VARCHAR2(10),//用户命名
       CONSTRAINT emp_emp_id_pk PRIMARY KEY (EMPLOYEE_ID)
);
4、UNIQUE制約
CREATE TABLE employees(
    employee_id      NUMBER(6),
    last_name        VARCHAR2(25) UNIQUE,--系统命名
    email            VARCHAR2(25),
    salary           NUMBER(8,2),
    commission_pct   NUMBER(2,2),
    hire_date        DATE NOT NULL,
    CONSTRAINT emp_email_uk UNIQUE(email) --用户命名
    );
5、PRIMARY KEY制約
CREATE TABLE departments(
    department_id        NUMBER(4),
    department_name      VARCHAR2(30) CONSTRAINT dept_name_nn NOT NULL,
    manager_id           NUMBER(6),
    location_id          NUMBER(4),
    CONSTRAINT dept_id_pk PRIMARY KEY(department_id));
6、FOREIGN KEY制約
CREATE TABLE employees(
    employee_id      NUMBER(6),
    last_name        VARCHAR2(25) NOT NULL,
    email            VARCHAR2(25) UNIQUE,
    salary           NUMBER(8,2),
    commission_pct   NUMBER(2,2),
    hire_date        DATE NOT NULL,
    department_id    NUMBER(4),
    CONSTRAINT emp_dept_fk FOREIGN KEY (department_id)
    REFERENCES departments(department_id) on delete cascade
);
  • FOREIGN KEY:表の列は、テーブルレベルで指定されています
  • REFERENCES:親表の列に示されています
  • DELETE CASCADE ON(カスケード削除):親テーブルの列を削除すると、削除された列に対応する子テーブルでもあります
  • DELETE SETのNULL(ブランクカスケード)ON:サブテーブル対応する列ブ
7、制約を追加します
ALTER TABLE employees 
      ADD CONSTRAINT  emp_manager_fk 
      FOREIGN KEY(manager_id) REFERENCES employees(employee_id);
8、削除制約
ALTER TABLE employees DROP CONSTRAINT  emp_manager_fk;

9、無効化の制約
  • ALTER TABLE文で無効な制約にDISABLE句を使用してください。
ALTER TABLE employees DISABLE CONSTRAINT emp_manager_fk;
図10に示すように、活性化制約
  • ENABLE句は、現在、無効な制約を起動することができます
ALTER TABLE	employees ENABLE CONSTRAINT	emp_manager_fk;
  • あなたが定義またはアクティブUNIQUEまたはPRIMARY KEY制約は自動的にUNIQUEまたはPRIMARY KEYインデックスが作成されます
11、クエリの制約
  • クエリデータディクショナリビューUSER_CONSTRAINTS
SELECT constraint_name, constraint_type, search_condition
  FROM user_constraints
 WHERE table_name = 'EMPLOYEES';

ビュー

1、ビューの概念
  • ビューは、仮想テーブルです。
  • テーブルビューに基づいて、既存のテーブルのビューを構築するためのベーステーブルと呼ばれています。
  • 声明の内容を表示するためのデータを提供するSELECT文で、ビューは、最大保存されたSELECT文として理解することができます。
  • ユーザーにベースビュー・テーブル・データを提供する別の症状
2.なぜビュー
  • コントロールのデータアクセス
  • クエリを簡素化
  • 同じデータに繰り返しアクセスを回避するために、
3、単純なビューと複雑なビュー

ここに画像を挿入説明

4、削除、変更、クエリを作成し、ビュー
  • ビューを作成します。
create or replace view empview 
as 
select employee_id emp_id,last_name name,department_name
from employees e,departments d
Where e.department_id = d.department_id
  • クエリビュー
SELECT * FROM	empview;
  • (VIEW句修正ビューをCREATE OR REPLACEを使用して)ビューを変更します
CREATE OR REPLACE VIEW empview
  (emp_id, name,  department_id)
AS SELECT  employee_id, first_name || ' ' || last_name, 
           department_id
   FROM    employees
   WHERE   department_id = 80;
  • 削除ビュー(削除ビューはちょうどビューの定義を削除し、データベース・テーブルを削除しません)
drop view empview
図5に示すように、DMLの所定の視野
  • DML操作は、単純なビューで実行されてもよいです
  • :ビュー定義を含む場合、一つの要素は、deleteを使用することはできません
    グループ関数
    GROUP BY句を
    DISTINCTキーワード
    ROWNUM擬似列
  • 例えば:
create or replace view sal_view
as select
avg(salary) avg_sal from employees
group by department_id
  • ビュー定義を更新使用できない一つの要素を含む場合:
    グループ関数
    GROUP BY句
    DISTINCTキーワード
    ROWNUM擬似列
    カラムを式として定義されます。

  • ビュー定義を挿入することはできません以下の要素のうちの1つを含む場合:
    グループ関数
    GROUP BY句
    DISTINCTキーワード
    ROWNUM擬似列を
    発現列として定義されている
    ビュー定義に含まれていない表非ヌル列の

図6に示すように、シールドDML操作
  • オプションは、ビュー画面にREAD ONLY DML操作で使用することができます
  • 任意のDML操作は、Oracleサーバー・エラーが返されます
CREATE OR REPLACE VIEW empvu10
    (employee_number, employee_name, job_title)
AS SELECT	employee_id, last_name, job_id
   FROM     employees
   WHERE    department_id = 10
   WITH READ ONLY;
7、トップN分析
`
  • トップN分析の最大値のいくつかを発見します:
SELECT ROWNUM, e.empno, e.ename
  FROM emp e
 WHERE ROWNUM <= 5
 ORDER BY e.empno;
  • 注:
    ROWNUM(擬似カラム)のみ使用するための<または<=、及び=、>、> =任意のデータを返しません。

シーケンス

1.シーケンスとは何ですか?
  • 配列:
    複数のユーザのためのデータベースを生成するためには、一意の値をオブジェクト
    固有値提供自動的に
    、共有オブジェクト
    主に主キーを提供するために使用される
    メモリアクセス効率にシーケンス値を向上させることができます
  • CREATE SEQUENCE文のシーケンスを作成します。
CREATE SEQUENCE sequence
       [INCREMENT BY n]  --每次增长的数值
       [START WITH n]    --从哪个值开始
       [{MAXVALUE n | NOMAXVALUE}]
       [{MINVALUE n | NOMINVALUE}]
       [{CYCLE | NOCYCLE}]     --是否需要循环
       [{CACHE n | NOCACHE}];  --是否缓存登录
2、シーケンスを作成
  • 表empの主キーを提供シーケンスEMP_SEQを作成します。
CREATE SEQUENCE EMP_SEQ
                INCREMENT BY 10
                START WITH 120
                MAXVALUE 9999
                NOCACHE
                NOCYCLE;
3、クエリー配列
  • クエリデータディクショナリビューUSER_SEQUENCESは、配列情報が定義され得ます
SELECT	sequence_name, min_value, max_value, 
	increment_by, last_number
FROM	user_sequences;
  • 表示順序次の有効な値NOCACHEオプションが指定されている場合、列LAST_NUMBER
  • そして、ダミー列NEXTVAL CURRVAL
  • 有効な値は次のNEXTVAL復帰シーケンス、すべてのユーザーが参照できます
  • 電流値は、配列に格納されCURRVAL
  • NEXTVALは、それ以外の場合は、まだこのセッションで定義されていないエラーCURRVALを報告します、CURRVALの前に指定する必要があります。
Insert into emp(empno,ename) values(seq.nextval,’c’);
4、削除シーケンス
  • 配列の使用を削除するDROP SEQUENCE文
  • 削除した後、シーケンスが再び参照することはできません
DROP SEQUENCE emp_seq;

指数

  • オブジェクトテーブルから独立しているモードは、テーブルは、別のテーブルまたはディスク領域に格納されてもよいです
  • インデックスはテーブルの上に影響を与えることはありません、削除または破損され、その影響は速度だけです
  • インデックスは、確立された後は、Oracleの管理システムが自動的に維持され、Oracle管理のインデックスを使用する際に決定します。ユーザーがクエリで使用するインデックスを指定する必要はありません
  • あなたがテーブルを削除すると、すべてが自動的に表の索引を削除されます。
  • ポインタにより、クエリの速度のOracleサーバーを加速
  • 迅速な測位データの方法により、ディスクI / O削減
1、インデックスを作成するには
  • 自動的に作成:システムが自動的にPRIMARY KEY制約またはUNIQUEの定義に対応する列に一意のインデックスを作成します
  • 手動で作成:ユーザーがクエリをスピードアップするために、他の列の非一意索引を作成することができます
  • EMP表のLAST_NAME列に索引を作成します。
CREATE INDEX 	emp_last_name_idx
ON 		emp(last_name);
あなたは、インデックスを作成する必要があります2、
  • あなたは、次のインデックスを作成することができます。
    分布範囲の値は、非常に幅のデータ列がある
    ことが多い条件の結合列WHERE句またはで表示され
    、全データの4%に表が頻繁にアクセスし、大量のデータが、データアクセスが約2%を占めるだろう
インデックスを作成しない3、
  • 次のインデックスを作成しないでください:
    テーブルは小さい
    に結合条件として列が頻繁に発生していないWHERE句や
    データのクエリよりも2%4%に
    定期的な更新のために

  • インデックスは、ちょうど私たちが名前を照会すると、速度は速くなります言って、必要はありません。もちろん、より高速を確認し、速度は挿入が遅くなります。データを挿入しながらので、だけでなく、インデックスを維持する必要があります。

4、クエリインデックス
  • 情報は、データ・ディクショナリ・ビューUSER_INDEXESを使用してUSER_IND_COLUMNSビューインデックスすることができます
SELECT	ic.index_name, ic.column_name,
	    ic.column_position col_pos,ix.uniqueness
FROM	user_indexes ix, user_ind_columns ic
WHERE	ic.index_name = ix.index_name
AND	ic.table_name = 'EMP';
5、インデックスを削除
  • インデックスを削除するために使用DROP INDEXコマンド
DROP INDEX emp_last_name_idx;
  • インデックスのみの所有者またはANY INDEXユーザー権限がインデックスを削除することができ、削除操作をロールバックすることはできませんDROPを持っています
6、同義語-synonym
  • アクセス同義語を使用して同じオブジェクト:
    他のユーザーオブジェクトに簡単にアクセス
    オブジェクトの名前の長さを短く
CREATE SYNONYM e FOR emp;
select * from e;
7、作成および削除同義語
  • ビューのシノニムを作成しますDEPT_SUM_VU
CREATE SYNONYM  d_sum
FOR  dept_sum_vu;
  • 削除シノニム
DROP SYNONYM d_sum;
公開された67元の記事 ウォン称賛19 ビュー9853

おすすめ

転載: blog.csdn.net/qq_41530004/article/details/104910148