NO.47 視圖颂龙、序列习蓬、索引 、 約束

為方便測(cè)試措嵌,創(chuàng)建表emp躲叼,包含以下信息:

emp測(cè)試用表

視圖VIEW

視圖是數(shù)據(jù)庫(kù)對(duì)象之一,在SQL語(yǔ)句中體現(xiàn)的角色與表一致企巢。但是視圖并非一張真實(shí)存在的表枫慷,它只是一個(gè)查詢語(yǔ)句對(duì)應(yīng)的結(jié)果集。

CREATE VIEW v_emp_10 AS SELECT empno, ename, sal, deptno FROM emp WHERE deptno = 10 DESC v_emp_10

SELECT * FROM v_emp_10

視圖對(duì)應(yīng)的子查詢中的字段可以指定別名,這樣該視圖對(duì)應(yīng)的字段名就是這個(gè)別名流礁。

當(dāng)一個(gè)字段是函數(shù)或者表達(dá)式涕俗,那么該字段必須指定別名

CREATE OR REPLACE VIEW v_emp_10 AS SELECT empno id,ename name,sal salary,deptno FROM emp WHERE deptno=10

視圖根據(jù)對(duì)應(yīng)的子查詢不同,分為簡(jiǎn)單視圖和復(fù)雜視圖

簡(jiǎn)單視圖:對(duì)應(yīng)的子查詢不含有函數(shù)神帅,表達(dá)式再姑,分組,去重找御,關(guān)聯(lián)查詢砌函。

除了簡(jiǎn)單視圖就是復(fù)雜視圖

簡(jiǎn)單視圖可以進(jìn)行DML操作平道,對(duì)該視圖的操作就是對(duì)該視圖數(shù)據(jù)來源的基礎(chǔ)表進(jìn)行的操作。

復(fù)雜視圖不允許進(jìn)行DML操作。

對(duì)簡(jiǎn)單視圖進(jìn)行DML操作也不能違反基礎(chǔ)表的約束條件鹃操。

對(duì)視圖進(jìn)行DML操作,視圖對(duì)基礎(chǔ)表操作時(shí)生真,只能對(duì)視圖可見的字段進(jìn)行什燕。

INSERT INTO v_emp_10(id,name,salary,deptno) VALUES (1001,'JACK',3000,10)

SELECT * FROM v_emp_10

SELECT * FROM emp

UPDATE v_emp_10 SET salary=4000 WHERE id=1001 DELETE FROM v_emp_10 WHERE id=1001

對(duì)視圖的不當(dāng)DML操作會(huì)污染基表數(shù)據(jù)

即:對(duì)視圖進(jìn)行DML操作后,視圖對(duì)基礎(chǔ)表對(duì)應(yīng)數(shù)據(jù)進(jìn)行該DML操作揭糕,但是操作后視圖卻對(duì)該記錄不可見萝快。

INSERT INTO v_emp_10(id,name,salary,deptno) VALUES(1001,'JACK',3000,20)

UPDATE v_emp_10 SET deptno=20

DELETE不會(huì)產(chǎn)生污染現(xiàn)象。

DELETE FROM v_emp_10 WHERE deptno=20

為視圖添加檢查選項(xiàng)著角,可以避免對(duì)視圖操作而導(dǎo)致的對(duì)基表的數(shù)據(jù)污染揪漩。

WITH CHECK OPTION

該選項(xiàng)要求對(duì)視圖進(jìn)行DML操作后,該記錄必須對(duì)視圖可見吏口。

CREATE OR REPLACE VIEW v_emp_10 AS SELECT empno id,ename name,sal salary,deptno FROM emp WHERE deptno=10 WITH CHECK OPTION

WITH READ ONLY

只讀選項(xiàng)

只讀選項(xiàng)要求對(duì)視圖僅能進(jìn)行查詢操作奄容,不能進(jìn)行任何DML操作。

CREATE OR REPLACE VIEW v_emp_10 AS SELECT empno id,ename name,sal salary,deptno FROM emp WHERE deptno=10 WITH READ ONLY

常用的數(shù)據(jù)庫(kù)的數(shù)據(jù)字典

USER_OBJECTS:記錄用戶創(chuàng)建過的所有數(shù)據(jù)庫(kù)對(duì)象

SELECT object_name,object_type FROM user_objects WHERE object_type='VIEW'?

USER_VIEWS:專門記錄曾經(jīng)創(chuàng)建過的視圖信息

SELECT view_name,text FROM user_views WHERE view_name LIKE '%EMP%'

USER_TABLES:專門記錄曾經(jīng)創(chuàng)建過的表的信息

SELECT table_name FROM user_tables

刪除視圖

DROP VIEW v_emp_10

創(chuàng)建復(fù)雜視圖

創(chuàng)建一張視圖产徊,包含員工工資及相關(guān)部門信息

包含:每個(gè)部門的平均工資昂勒,最大,最小囚痴,工資總和叁怪,以及對(duì)應(yīng)的部門名稱,部門編號(hào)深滚。

CREATE OR REPLACE VIEW v_emp_salinfo AS SELECT AVG(e.sal) avg_sal,MAX(e.sal) max_sal,MIN(e.sal) min_sal,SUM(e.sal) sum_sal,d.deptno,d.dname,d.loc FROM emp e,dept d WHERE e.deptno=d.deptno GROUP BY d.deptno,d.dname,d.loc

SELECT * FROM v_emp_salinfo

查看哪些員工的工資高于其所在部門平均工資?

SELECT e.ename,e.sal,e.deptno FROM emp e,v_emp_salinfo v WHERE e.deptno=v.deptno

AND e.sal>v.avg_sal

序列SEQUENCE

序列是數(shù)據(jù)庫(kù)對(duì)象之一奕谭,作用是根據(jù)指定的規(guī)則生成一系列數(shù)字。通常使用序列生成的

數(shù)字是為表中的主鍵字段提供值使用痴荐。

CREATE SEQUENCE seq_emp_id START WITH 1 INCREMENT BY 1

序列支持兩個(gè)偽列:

NEXTVAL:獲取序列的下一個(gè)數(shù)字血柳,如果是新創(chuàng)建的序列,那么會(huì)從START WITH開始返回生兆。

之后則是用上次生成的數(shù)字加上步長(zhǎng)來得到本次生成的數(shù)字返回难捌。

需要注意膝宁,序列是不能后退的。并且不受事務(wù)控制根吁。

CURRVAL:獲取序列最后生成的數(shù)字员淫,新創(chuàng)建的序列至少調(diào)用NEXTVAL生成一個(gè)數(shù)字后才可以使用。CURRVAL不會(huì)導(dǎo)致序列步進(jìn)击敌。

SELECT seq_emp_id.NEXTVAL FROM dual

SELECT seq_emp_id.CURRVAL FROM dual

使用序列為EMP表主鍵字段提供值:

INSERT INTO emp(empno,ename,job,sal,deptno) VALUES (seq_emp_id.NEXTVAL,'JACK','CLERK',3000,10)

SELECT * FROM emp

刪除一個(gè)序列

DROP SEQUENCE seq_emp_id

序列的數(shù)據(jù)字典

SELECT * FROM USER_SEQUENCES

索引INDEX

索引是數(shù)據(jù)庫(kù)對(duì)象之一介返,作用是提高查詢效率

索引的創(chuàng)建時(shí)是數(shù)據(jù)庫(kù)自行完成的,并且數(shù)據(jù)庫(kù)會(huì)在適當(dāng)?shù)臅r(shí)候自動(dòng)使用索引沃斤。

CREATE INDEX idx_emp_ename ON emp(ename)

經(jīng)常出現(xiàn)在WHERE中和ORDER BY中的字段要添加索引圣蝎。經(jīng)常出現(xiàn)在DISTINCT后面的字段也可以添加索引。

需要注意衡瓶,對(duì)于字符串類型字段徘公,若在WHERE中使用LIKE進(jìn)行過濾時(shí),是不會(huì)用到索引的哮针。

約束

非空約束

CREATETABLE employees(

eidNUMBER(6),

nameVARCHAR2(30)NOTNULL,

salaryNUMBER(7,2),

hiredate DATE

CONSTRAINTemployees_hiredate_nn NOT NULL

)

添加非空約束

ALTER TABLE employees MODIFY(eid NUMBER(6) NOT NULL)

取消非空約束

ALTER TABLE employees MODIFY(eid NUMBER(6) NULL)

唯一性約束

CREATE TABLE employees2 (

eid NUMBER(6) UNIQUE,

name VARCHAR2(30),

email VARCHAR2(50),

salary NUMBER(7, 2),

hiredate DATE,

CONSTRAINT employees_email_uk UNIQUE(email)

)

增加唯一性約束

ALTER TABLE employees ADD CONSTRAINT employees_name_uk UNIQUE(name)

測(cè)試

INSERT INTO employees2

(eid,name,email)

VALUES

(NULL,'jack',NULL)

SELECT * FROM employees2

主鍵約束

一張表只能有一個(gè)字段定義主鍵約束关面,主鍵約束要求該字段非空且唯一

CREATE TABLE employees3 (

eid NUMBER(6) PRIMARY KEY,

name VARCHAR2(30),

email VARCHAR2(50),

salary NUMBER(7, 2),

hiredate DATE

)

增加主鍵約束

ALTER TABLE employees3 ADD CONSTRAINT employees3_eid_pk PRIMARY KEY(eid);

測(cè)試

INSERT INTO employees3

(eid,name,email)

VALUES

(2,'jack','jack@123.com')

外鍵約束

外鍵約束條件定義在兩個(gè)表的字段或一個(gè)表的兩個(gè)字段上,用于保證相關(guān)兩個(gè)字段的關(guān)系十厢。比如emp表的deptno列參照dept表的deptno列缭裆,則dept稱作主表或父表,emp表稱作從表或子表寿烟。

CREATE TABLE employees4(

eidNUMBER(6),

nameVARCHAR2(30),

salaryNUMBER(7,2),

deptnoNUMBER(4)

);

ALTER TABLE employees4 ADD CONSTRAINT employees4_deptno_fk FOREIGN KEY(deptno) REFERENCES dept(deptno);

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

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

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

檢查約束

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末徘六,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子榴都,更是在濱河造成了極大的恐慌待锈,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件嘴高,死亡現(xiàn)場(chǎng)離奇詭異竿音,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)拴驮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門春瞬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人套啤,你說我怎么就攤上這事宽气。” “怎么了?”我有些...
    開封第一講書人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵萄涯,是天一觀的道長(zhǎng)绪氛。 經(jīng)常有香客問我,道長(zhǎng)涝影,這世上最難降的妖魔是什么枣察? 我笑而不...
    開封第一講書人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮袄琳,結(jié)果婚禮上询件,老公的妹妹穿的比我還像新娘。我一直安慰自己唆樊,他們只是感情好宛琅,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著逗旁,像睡著了一般嘿辟。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上片效,一...
    開封第一講書人閱讀 51,292評(píng)論 1 301
  • 那天红伦,我揣著相機(jī)與錄音,去河邊找鬼淀衣。 笑死昙读,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的膨桥。 我是一名探鬼主播蛮浑,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼只嚣!你這毒婦竟也來了沮稚?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤册舞,失蹤者是張志新(化名)和其女友劉穎蕴掏,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體调鲸,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡盛杰,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了线得。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片饶唤。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖贯钩,靈堂內(nèi)的尸體忽然破棺而出募狂,到底是詐尸還是另有隱情办素,我是刑警寧澤,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布祸穷,位于F島的核電站性穿,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏雷滚。R本人自食惡果不足惜需曾,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望祈远。 院中可真熱鬧呆万,春花似錦、人聲如沸车份。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)扫沼。三九已至出爹,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間缎除,已是汗流浹背严就。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留器罐,地道東北人梢为。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像轰坊,于是被迫代替她去往敵國(guó)和親抖誉。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 1.簡(jiǎn)介 數(shù)據(jù)存儲(chǔ)有哪些方式衰倦?電子表格,紙質(zhì)文件旁理,數(shù)據(jù)庫(kù)樊零。 那么究竟什么是關(guān)系型數(shù)據(jù)庫(kù)? 目前對(duì)數(shù)據(jù)庫(kù)的分類主要是...
    喬震閱讀 1,715評(píng)論 0 2
  • 5.多表查詢 多表查詢 目的:從多張表獲取數(shù)據(jù) 前提:進(jìn)行連接的多張表中有共同的列 等連接 通過兩個(gè)表具有相同意義...
    喬震閱讀 1,233評(píng)論 0 0
  • 數(shù)據(jù)庫(kù)概述: 數(shù)據(jù)庫(kù)(DataBase孽文,DB):指長(zhǎng)期保存在計(jì)算機(jī)的存儲(chǔ)設(shè)備上驻襟,按照一定規(guī)則組織起來,可以被各種用...
    字節(jié)碼閱讀 538評(píng)論 0 0
  • mysql數(shù)據(jù)庫(kù)中 :database : 文件夾table : 數(shù)據(jù)表(數(shù)據(jù)文件) 進(jìn)入mysqlmysql -...
    賦閑閱讀 564評(píng)論 0 0
  • 終于熬到放假了,手機(jī)關(guān)機(jī)减牺,睡了幾天懶覺豌习,頓時(shí)感覺腦袋都輕飄了許多存谎。 出門覓食去,想吃的吃飽了肚肥隆,感覺前所未有的舒服...
    清清霧閱讀 203評(píng)論 0 0