成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

Oracle數(shù)據(jù)基礎(chǔ)(三)

一. 視圖,序列,索引

創(chuàng)新互聯(lián)是專(zhuān)業(yè)的船營(yíng)網(wǎng)站建設(shè)公司,船營(yíng)接單;提供成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站,網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專(zhuān)業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行船營(yíng)網(wǎng)站開(kāi)發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專(zhuān)業(yè)做搜索引擎喜愛(ài)的網(wǎng)站,專(zhuān)業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!

視圖

    1. 什么是視圖

          視圖(VIEW)也被稱(chēng)作虛表,是一組數(shù)據(jù)的邏輯表示

          視圖對(duì)應(yīng)于一條SELECT語(yǔ)句,結(jié)果集被賦予一個(gè)名字,即視圖名字

          視圖本身并不包含任何數(shù)據(jù),它只包含映射到基表的一個(gè)查詢(xún)語(yǔ)句,當(dāng)基于數(shù)據(jù)發(fā)生變化,視圖數(shù)據(jù)頁(yè)隨之變化

          CREATE [OR REPLACE] VIEW view_name[alias[,alias…]] AS subquery;

          視圖創(chuàng)建后,可以像操作表一樣操作視圖,主要是查詢(xún)

          SUBQUERY是SELECT查詢(xún)語(yǔ)句,對(duì)應(yīng)的表被稱(chēng)為基表

               — SELECT語(yǔ)句是基于單表建立的,且不包含任何函數(shù)運(yùn)算,表達(dá)式或分組函數(shù),叫簡(jiǎn)單視圖,這時(shí)視圖是基表的子集

               — SELECT語(yǔ)句基于單表,但包含了單行函數(shù),表達(dá)式,分組函數(shù)或GROUP BY子句,叫做復(fù)雜視圖

               — SELECT語(yǔ)句基于多個(gè)表,叫做連接視圖

    2. 視圖的作用

          簡(jiǎn)化復(fù)雜查詢(xún):若經(jīng)常需要執(zhí)行某項(xiàng)復(fù)雜查詢(xún),可以基于這個(gè)復(fù)雜查詢(xún)建立視圖,此后查詢(xún)次視圖即可

          限制數(shù)據(jù)訪問(wèn):當(dāng)訪問(wèn)視圖時(shí)只能訪問(wèn)到對(duì)應(yīng)的SELECT語(yǔ)句中涉及的列,對(duì)基表中其它列起到安全和保密的作用

     

    3. 授權(quán)創(chuàng)建簡(jiǎn)單視圖(單表)

          創(chuàng)建視圖的語(yǔ)句是:CREATE VIEWER

          用戶(hù)必須有CREATE VIEWER系統(tǒng)權(quán)限,才能創(chuàng)建視圖

          管理員通過(guò)DCL語(yǔ)句授予用戶(hù)創(chuàng)建視圖的權(quán)限:GRANT CREATE VIEWER TO user;

          eg: CREATE VIEWER v_emp_10 AS SELECT empno,name,sal,deptno FROM emp WHERE deptno = 10;

    4. 查詢(xún)視圖

          desc v_emp_10;

    5. 對(duì)視圖進(jìn)行INSERT操作

          視圖本身并不包含數(shù)據(jù),只是基表數(shù)據(jù)的邏輯映射

          當(dāng)對(duì)視圖執(zhí)行DML操作時(shí),實(shí)際上是對(duì)基表的DML操作

          對(duì)視圖執(zhí)行DML操作的基本原則:

               — 簡(jiǎn)單視圖能夠執(zhí)行DML操作,下列情況除外:在基表中定義了非空列,但簡(jiǎn)單視圖對(duì)應(yīng)的SELECT語(yǔ)句并沒(méi)有包含這個(gè)非空列,導(dǎo)致這個(gè)非空列隊(duì)視圖不可見(jiàn),這時(shí)無(wú)法對(duì)視圖執(zhí)行INSERT操作

               — 如果視圖定義中包含了函數(shù),表達(dá)式,分組語(yǔ)句,DISTINCT關(guān)鍵字或ROWNUM偽列,不允許執(zhí)行DML操作

               — DML操作不能違反基表的約束條件

               — 簡(jiǎn)單視圖可以通過(guò)DML操作影響到基表數(shù)據(jù)

               — 視圖進(jìn)行DELETE操作時(shí)只能刪除基表中視圖中看得到的數(shù)據(jù),不能基表中存在而視圖中看不到的數(shù)據(jù)

    6. 創(chuàng)建具有CHECK OPTION約束的視圖

          CREATE [OR REPLACE] VIEW view_name[(alias[, alias...])] AS subquery [WITH CHECK OPTION];

          WITH CHECK OPTION短語(yǔ)表示,通過(guò)視圖所做的修改,必須在視圖的可見(jiàn)范圍

               — 假設(shè)INSERT,新增的記錄在視圖仍可查看

               — 假設(shè)UPDATE,修改后的結(jié)果必須能通過(guò)視圖查看到

    7. 創(chuàng)建具有READ ONLY約束的視圖

          CREATE [OR REPLACE] VIEW view_name[(alias[, alias...])] AS subquery [WITH READ ONLY];

          如果沒(méi)有在視圖上執(zhí)行DML操作的必要,在建立視圖時(shí)聲明為只讀來(lái)避免這種情況,保證視圖對(duì)應(yīng)的基表數(shù)據(jù)不會(huì)被非法修改

    8. 通過(guò)查詢(xún)user_viewers獲取相關(guān)信息

          和視圖相關(guān)的數(shù)據(jù)字典:

               — USER_OBJECTS

               — USER_VIEWS

               — USER_UPDATE_COLUMNS  (查看哪些列允許增刪改)

               eg:在數(shù)據(jù)字典USER_OBJECTS中查詢(xún)所有視圖名稱(chēng)

                      SELECT object_name FROM user_objects WHERE object_type = ‘VIEW’;

    9. 創(chuàng)建復(fù)雜視圖(多表關(guān)聯(lián))

          復(fù)雜視圖:在子查詢(xún)中包含了表達(dá)式,單行函數(shù)或分組函數(shù)的視圖

          必須為子查詢(xún)中的表達(dá)式或函數(shù)定義別名

          復(fù)雜視圖不允許DML操作(即INSERT,UPDATE,DELETE)

    10. 刪除視圖

          當(dāng)不再需要視圖的定義,可以使用DROP VIEW語(yǔ)句刪除視圖

               eg:DROP VIEW view_name;

          視圖雖然時(shí)存放在數(shù)據(jù)字典中的獨(dú)立對(duì)象,但視圖僅僅是基于表的一個(gè)查詢(xún)定義,所以對(duì)視圖的刪除不會(huì)導(dǎo)致基表數(shù)據(jù)的丟失,不影響基表數(shù)據(jù)

SELECT sys_guid() FROM DUAL;//可以得到32位的uuid

JAVA中:

          String uuid = UUID.randomUUID().toString();


序列

    1. 什么是序列

          序列(SEQUENCE)是一種用來(lái)生成唯一數(shù)字值的數(shù)據(jù)庫(kù)對(duì)象

          序列的值由Oracle程序按遞增或遞減順序自動(dòng)生成,通常用來(lái)自動(dòng)生成表的主鍵值,是一種高效率獲得唯一鍵值的途徑

          序列是獨(dú)立的數(shù)據(jù)庫(kù)對(duì)象,和表是對(duì)立的對(duì)象,序列并不依附于表

          通常一個(gè)序列為一個(gè)表提供主鍵值,但一個(gè)序列也可以為多個(gè)表提供主鍵

    

    2. 創(chuàng)建序列

          CREATE SEQUENCE [schema.]sequence_name

          [START WITH i] [INCREMENT BY j ]

          [MAXVALUE m | NOMAXVALUE ]

          [MINVALUE n | NOMINVALUE ]

          [CYCLE | NOCYCLE ][ CACHE p | NOCACHE]

          sequence_name是序列名,將創(chuàng)建在schema方案下,schema是用戶(hù)名,給自己用戶(hù)創(chuàng)建時(shí)可不寫(xiě)

          序列的第一個(gè)序列值是i,步進(jìn)(即步長(zhǎng))是j

          如果j是整數(shù),表示遞增,如果是負(fù)數(shù),表示遞減

          序列可生成的最大值是m,最小值n

          如果沒(méi)有設(shè)置任何可選參數(shù),序列的第一個(gè)值是1,步進(jìn)是1

          CYCLE表示在遞增至最大值或遞減至最小值之后是否重用序列。若是遞減并有最大值,從最大值開(kāi)始。若是遞增并有最小值,從最小值開(kāi)始。若沒(méi)有從START WITH指定的值開(kāi)始。默認(rèn)是NOCYCLE

          CACHE用來(lái)指定先預(yù)取p個(gè)數(shù)據(jù)在緩存中,以提高序列值的生成效率,默認(rèn)是20

    3. 使用序列

          eg:序列起始數(shù)據(jù):100,步進(jìn)10,則序列號(hào)分別是:100,110,120,130...

               CREATE SEQUENCE emp_seq START WITH 100 INCREMENT BY 10;

          序列中有2個(gè)偽列:

               — NEXTVAL:獲取序列的下個(gè)值

               — CURRENT:獲取序列的當(dāng)前值

          當(dāng)序列創(chuàng)建以后,必須先執(zhí)行一次NEXTVAL,之后才能使用CURRENT

          獲取序列的第一個(gè)值,并使用序列值為EMP表插入新的記錄

          SELECT emp_seq.NEXTVAL FROM DUAL;//第一次執(zhí)行:100;第二次執(zhí)行:110

          INSERT INTO emp(epmno, ename) VALUES(emp_seq.NEXTVAL, ‘DONNA’);

    4. 刪除序列

          DROP SEQUENCE sequence_name;


索引

    1. 索引的原理

          索引是一種允許值接訪問(wèn)數(shù)據(jù)表中某一數(shù)據(jù)行的樹(shù)型結(jié)構(gòu),為了提高查詢(xún)效率而引入,是獨(dú)立于表的對(duì)象,可以存放在與表不同的表空間(TABLESPACE)中

          索引記錄中存有索引關(guān)鍵字和指向表中數(shù)據(jù)的指針(地址)

          對(duì)索引進(jìn)行的I/O操作比對(duì)表進(jìn)行操作要少很多

          索引一旦被建立就將被Oracle系統(tǒng)自動(dòng)維護(hù),查詢(xún)語(yǔ)句中不用指定使用哪個(gè)索引

          索引是一種提高查詢(xún)效率的機(jī)制

    

    2. 創(chuàng)建索引

          CREATE [UNIQUE] INDEX index_name ON table(column[, column…]);

               — index_name表示索引名稱(chēng)

               — table表示表明

               — column表示列名,可以建立單列索引或復(fù)合索引

               — UNIQUE表示唯一索引

               — 索引指定的列是在查詢(xún)時(shí)WHERE子句中經(jīng)常出現(xiàn)的列

          復(fù)合索引也叫多列索引,是基于多個(gè)列的索引

          如果經(jīng)常在ORDER BY子句中使用job,sal作為排序依據(jù),則可以建立復(fù)合索引:

               CREATE INDEX idx_emp_job_sal ON emp(job, sal);

               當(dāng)做下面查詢(xún)時(shí)會(huì)自動(dòng)應(yīng)用索引[idx_emp_job_sal]

               SELECT empno, name, sal, job FROM amp ORDER BY job,sal;

          

    3. 創(chuàng)建基于函數(shù)的索引

          可以在列上建立一個(gè)基于UPPER函數(shù)的索引:

               CREATE INDEX emp_name_upper_idx ON emp(UPPER(name)); 

               當(dāng)做下面查詢(xún)時(shí)會(huì)自動(dòng)應(yīng)用索引[emp_name_upper_idx]

               SELECT empno FROM emp WHERE UPPER(ename) = ‘KING'

    4. 修改和刪除索引

          如果經(jīng)常在索引列上執(zhí)行DML操作,需要定期重建索引,提高索引的空間利用率:ALTER INDEX index_name REBUILD;

          當(dāng)一個(gè)表上有不合理的索引,會(huì)導(dǎo)致操作性能下降,刪除索引:DROP INDEX index_name;

          

    5. 合理使用索引提升查詢(xún)效率

          為經(jīng)常出現(xiàn)在WHERE子句中的列創(chuàng)建索引

          為經(jīng)常出現(xiàn)在ORDER BY,DISTINCT后面的字段建立索引。如果建立的是復(fù)合索引,索引的字段順序要和這些關(guān)鍵字后面的字段順序一致

          為經(jīng)常作為表的連接條件的列上創(chuàng)建索引

          不要在經(jīng)常做DML操作的表上建立索引

          不要在小表上建立索引

          限制表上的索引數(shù)目,索引并不是越多越好

          刪除很少被使用的,不合理的索引

二. 約束

約束概述

    1. 約束的作用

          約束(CONSTRAINT)的全稱(chēng)是約束條件,也稱(chēng)為完整性約束條件

          約束條件可以保證表中數(shù)據(jù)的完整性,保證數(shù)據(jù)間的商業(yè)邏輯

    2. 約束的類(lèi)型

          — 非空約束(Not Null),簡(jiǎn)稱(chēng)NN

          — 唯一性約束(Unique),簡(jiǎn)稱(chēng)UK

          — 主鍵約束(Primary Key),簡(jiǎn)稱(chēng)PK

          — 外鍵約束(Foreign Key),簡(jiǎn)稱(chēng)FK

          — 檢查約束(Check),簡(jiǎn)稱(chēng)CK

非空約束

    1. 建表時(shí)添加非空約束

          列級(jí)約束:在創(chuàng)建表指定列的同時(shí)聲明的約束

          CREATE TABLE employees(id NUMBER(6),

                                                       name VARCHAR2(30) NOT NULL,//列級(jí)約束1

                                                       salary NUMBER(7,2),

                                                       hiredate DATE CONSTRAINT employees_hiredate_nn NOT NULL//列級(jí)約束2

                                                       );

          NOT NULL只能是列級(jí)約束

    2. 修改表時(shí)添加非空約束

          ALTER TABLE employees MODIFY (id NUMBER(6) NOT NULL);

    3. 取消非空約束

          ALTER TABLE employees MODIFY (id NUMBER(6) null);

唯一性約束

    1. 什么是唯一性約束

          唯一性(Unique)約束條件用于保證字段或者字段的組合不出現(xiàn)重復(fù)值

          當(dāng)給表的某個(gè)列定義了唯一約束條件,該列的值不允許重復(fù),但允許是NULL

    2. 添加唯一性約束

          CREATE TABLE employees(id NUMBER(6)  UNIQUE,//列級(jí)約束

                                                       name VARCHAR2(30),

                                                       email VARCHAR2(50),

                                                       salary NUMBER(7,2),

                                                       hiredate DATE,

                                                       CONSTRAINT employees_email_uk UNIQUE(email)//表級(jí)約束

                                                       );

          列級(jí)約束是在建表聲明某一列的同時(shí)指定約束條件,表級(jí)約束是所有列都聲明完畢后單獨(dú)加約束,括號(hào)里指定約束對(duì)象是哪一列。

          唯一性約束即可以是列級(jí)約束也可以是表級(jí)約束

          在建表之后增加唯一性約束條件:ALTER TABLE employees ADD CONSTRAINT employees_name_uk UNIQUE(name);//新增的唯一性約束條件只會(huì)對(duì)該增加之后的數(shù)據(jù)起作用

主鍵約束

    1. 主鍵的意義

          主鍵(Primary Key)約束條件從功能上看相當(dāng)于非空且唯一的組合

          主鍵字段可以是單字段或多字段組合

          主鍵可用來(lái)確定表中唯一一行數(shù)據(jù)

          一個(gè)表中只允許建立一個(gè)主鍵,而其它約束條件則沒(méi)有明確的個(gè)數(shù)限制

    2. 主鍵選取的原則

          主鍵應(yīng)是對(duì)系統(tǒng)無(wú)意義的數(shù)據(jù)

          永遠(yuǎn)不要更新主鍵,讓主鍵除了唯一標(biāo)識(shí)一行之外,再無(wú)其它用處

          主鍵不應(yīng)包含動(dòng)態(tài)變化的數(shù)據(jù),如時(shí)間戳

          主鍵應(yīng)自動(dòng)生成,不要人為干預(yù),以免它帶有了唯一標(biāo)識(shí)以外的意義

          主鍵盡量建立在單列上

    3. 添加主鍵約束

          在建表時(shí)添加主鍵約束條件:

               CREATE TABLE employees (

                    id NUMBER(6) PRIMARY KEY,

                    name VARCHAR2(30),

                    email VARCHAR2(50),

                    salary NUMBER(7,2),

                    hiredate DATE 

               );

          建表后創(chuàng)建主鍵約束條件,并自定義約束條件名稱(chēng):

               CREATE TABLE employees (

                    id NUMBER(6),

                    name VARCHAR2(30),

                    email VARCHAR2(50),

                    salary NUMBER(7,2),

                    hiredate DATE 

               );

               ALTER TABLE employees ADD CONSTRAINT employees ADD CONSTRAINT employees_id_pk PRIMARY KEY (id);

          

外鍵約束

    1. 外鍵約束的意義

          外鍵約束條件定義在兩個(gè)表的字段或一個(gè)表的兩個(gè)字段上,用于保證相關(guān)兩個(gè)字段的關(guān)系

          dept表:主表或父表

          emp表:從表或子表

deptno(PK)nameloc
10研發(fā)部北京
20銷(xiāo)售部上海

empno(PK)namedeptno(FK)
1001劉心10
1002李蘇海10

    1. 添加外鍵約束

          先建表,在建表后建立外鍵約束條件

           CREATE TABLE employees (

                    id NUMBER(6),

                    name VARCHAR2(30),

                    email VARCHAR2(50),

                    salary NUMBER(7,2),

                    deptno NUMBER(4)

               );

          ALTER TABLE employees ADD CONSTRAINT employees_deptno_fk FOREIGN KEY (deptno) REFERENCES dept(deptno);

          

    2. 外鍵約束對(duì)一致性的維護(hù)

          外鍵約束條件包含兩個(gè)方面的數(shù)據(jù)約束:

               — 從表上定義的外鍵的列值,必須從主表被參照的列值中選取,或者為NULL

               — 當(dāng)主表參照列的值被從表參照時(shí),主表的該行記錄不允許被刪除

    3. 外鍵約束對(duì)性能的降低

          若在一個(gè)頻繁DML操作的表上建立外鍵,每次DML操作都將導(dǎo)致數(shù)據(jù)庫(kù)自動(dòng)對(duì)外鍵所關(guān)聯(lián)的對(duì)應(yīng)表做檢查,產(chǎn)生開(kāi)銷(xiāo),如果已在程序中控制邏輯,這些判斷將增加額外負(fù)擔(dān),可以省去

          外鍵確定了主從表的先后生成關(guān)系,有時(shí)會(huì)影響業(yè)務(wù)邏輯

    4. 關(guān)聯(lián)不一定需要外鍵約束

          保證數(shù)據(jù)完整行可由程序或觸發(fā)器控制

          簡(jiǎn)化開(kāi)發(fā),維護(hù)數(shù)據(jù)時(shí)不用考慮外鍵約束

          大量數(shù)據(jù)DML操作時(shí)不需要考慮外鍵耗費(fèi)時(shí)間

檢查約束

    1. 什么是檢查約束

          檢查(Check)約束條件用來(lái)強(qiáng)制在字段上的每個(gè)值都要滿(mǎn)足Check中定義的條件

          當(dāng)定義了Check約束的列新增或修改數(shù)據(jù)時(shí),數(shù)據(jù)必須符合Check約束中定義的條件

    2. 添加檢查約束

          eg:?jiǎn)T工薪水必須大于2000

               ALTER TABLE employees4 ADD CONSTRAINT employees4_salary_check CHECK (salary > 2000);

  

  3. 刪除一個(gè)約束

          ALTER TABLE employees DROP CONSTRAINT employees_salary_check;

查看約束的數(shù)據(jù)字典

          SELECT constraint_name,constraint_type FROM user_constraints WHERE table_name = ‘EMPLOYEES’;

          — constraint_type:約束類(lèi)型

          — constraint_name:約束名

SELECT * FROM user_constraints WHERE table_name = ‘EMPLOYEES’;

網(wǎng)頁(yè)名稱(chēng):Oracle數(shù)據(jù)基礎(chǔ)(三)
文章源于:http://jinyejixie.com/article8/gpchip.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化做網(wǎng)站、、網(wǎng)站策劃、域名注冊(cè)、企業(yè)網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名