- 1.1制約は何ですか?
- 1.2、表レベルおよび列レベルの制約?
- 1.3、NOT NULL制約
- 1.4、UNIQUE制約
- 1.5、PRIMARY KEY制約
- 1.6、FOREIGN KEY制約
- 1.7、制約を追加します
- 1.8、削除制約
- 1.9、制約の無効化
- 1.10、起動制約
- 1.11、クエリの制約
- 2.1、ビューの概念
- 2.2なぜビュー
- 2.3、シンプルかつビューの複雑なビュー
- 2.4、削除、変更、クエリを作成し、ビュー
- 2.5、DMLの所定のビューを使用して
- 2.6シールドDML操作
- 2.7、トップN分析
- 4.1、インデックスを作成します
- あなたは、インデックスを作成する必要が4.2、
- あなたは、インデックスを作成しない4.3、
- 4.4、クエリインデックス
- 4.5、インデックスを削除
- 4.6、同義語-synonym
- 4.7、作成および削除同義語
制約
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;