欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

SQL基礎(chǔ)之創(chuàng)建其他方案對象(十五)

 視圖概述:

網(wǎng)站設(shè)計制作過程拒絕使用模板建站;使用PHP+MYSQL原生開發(fā)可交付網(wǎng)站源代碼;符合網(wǎng)站優(yōu)化排名的后臺管理系統(tǒng);成都網(wǎng)站建設(shè)、做網(wǎng)站收費合理;免費進(jìn)行網(wǎng)站備案等企業(yè)網(wǎng)站建設(shè)一條龍服務(wù).我們是一家持續(xù)穩(wěn)定運營了10年的創(chuàng)新互聯(lián)建站網(wǎng)站建設(shè)公司。

– 從視圖中創(chuàng)建、修改和檢索數(shù)據(jù)

– 在視圖上的數(shù)據(jù)操縱語言(DML)操作

– 刪除視圖

數(shù)據(jù)庫對象

Object 對象Description 描述
Table 表基本的數(shù)據(jù)存儲集合,由行和列組成。
View 視圖從一張表或多張表中抽出的邏輯上相關(guān)的數(shù)據(jù)集合
Sequence 序列生成規(guī)律的數(shù)值
Index 索引提高查詢性能
Synonym 同義詞給對象起的別名

什么是視圖?我的理解就是從一張表或多張表創(chuàng)建一個自定義的關(guān)聯(lián)虛擬表

SQL 基礎(chǔ)之創(chuàng)建其他方案對象(十五)

視圖有如下幾個優(yōu)點:

  •  限制數(shù)據(jù)訪問

  •  簡化查詢

  •  數(shù)據(jù)獨立性

  •  避免重復(fù)訪問相同的數(shù)據(jù)

簡單視圖和復(fù)雜視圖

特點簡單視圖復(fù)雜視圖
表的數(shù)量OneOne or more 
包含函數(shù)NoYes
包含分組數(shù)據(jù)NoYes
通過視圖做 DML 操作YesNot alway

創(chuàng)建視圖

 CREATE VIEW 子句中嵌入子查詢: 

create [or replace] [force|noforce] view myview

[(alias[, alias]...)]

as subquery

[with check option [constraint constraint]]

[with read only [constraint constraint]];

  • 子查詢可以包含復(fù)雜的 SELECT 語法

  • With check option: 防止插入不可見的行,防止從視圖中丟失的更新。

1、創(chuàng)建視圖emp80,包含部門為80的員工詳細(xì)信息:

create view  emp80

as select employee_id, last_name, salary

from employees

where department_id = 80;

使用 SQL*Plus 的 DESCRIBE 命令描述視圖結(jié)構(gòu)

desc emp80

2、在子查詢中使用列別名創(chuàng)建視圖:

create view  salv50

as select employee_id id_number, last_name name,

salary*12 ann_salary

from employees

where department_id = 50;

在選擇視圖中的列時應(yīng)使用別名

修改視圖

使用CREATE OR REPLACE VIEW 子句修改EMPVU80視圖。為每一列都增加別名:

 create or replace view emp80

(id_number, name, sal, department_id)

as select employee_id, first_name || ' '

|| last_name, salary, department_id

from employees

where department_id = 80;

在 CREATE OR REPLACE VIEW 子句中列出來的別名要與子查詢中各列相對應(yīng)

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

創(chuàng)建一個包含組函數(shù),從兩張表中顯示數(shù)據(jù)的復(fù)雜視圖:

create or replace view dept_sum_vu

(name, minsal, maxsal, avgsal)

as select d.department_name, min(e.salary),

max(e.salary),avg(e.salary)

from employees e join departments d

on (e.department_id = d.department_id)

group by d.department_name;

視圖上執(zhí)行 DML  操作的規(guī)則-- DELETE

可以在簡單視圖上執(zhí)行DML操作

當(dāng)視圖定義中包含以下元素之一時不能刪除行

– 組函數(shù)

– GROUP BY 子句

– DISTINCT 關(guān)鍵字

– ROWNUM 偽列

視圖上執(zhí)行 DML  操作的規(guī)則-- UPDATE

當(dāng)視圖定義中包含以下元素之一時不能修改數(shù)據(jù):

– 組函數(shù)

– GROUP BY 子句

– DISTINCT 關(guān)鍵字

– ROWNUM 偽列

– 表達(dá)式定義的列

視圖上執(zhí)行 DML 操作的規(guī)則-- INSERT

 當(dāng)視圖定義中包含以下元素之一時不能插入數(shù)據(jù):

– 組函數(shù)

– GROUP BY 子句

– DISTINCT 關(guān)鍵字

– ROWNUM 偽列

– 表達(dá)式定義的列

– 表中非空的列在視圖定義中未包括

 WITH CHECK OPTION 約束

使用 WITH CHECK OPTION 子句確保DML只能在特定的范圍內(nèi)執(zhí)行:

create or replace view empvu20

as select *

from employees

where department_id = 20

with check option constraint empvu20_ck ; 

任何違反WITH CHECK OPTION 約束的請求都會失敗

屏蔽 DML  操作

  • 可以使用 WITH READ ONLY 選項屏蔽對視圖的DML 操作

  • 任何 DML 操作都會返回一個Oracle server 錯誤

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;

刪除視圖

刪除視圖只是刪除視圖的定義,并不會刪除基表的數(shù)據(jù)

drop view emp80;

drop view slav;

序列

  •  自動提供唯一的數(shù)值

  •  共享對象

  •  主要用于提供主鍵值

  •  可代替應(yīng)用程序生成序號

  •  將序列值緩存到內(nèi)存中,可以提高訪問效率

CREATE SEQUENCE  語法

 定義一個序列自動生成連續(xù)的數(shù)字:

 create sequence sequence

[increment by n]

[start with n]

[{maxvalue n | nomaxvalue}]

[{minvalue n | nominvalue}]

[{cycle | nocycle}]

[{cache n | nocache}];

  •  創(chuàng)建序列 DEPT_DEPTID_SEQ 為表 DEPARTMENTS 提供主鍵。

  •  不是用 CYCLE 選項

create sequence dept_deptid_seq

increment by 10

start with 120

maxvalue 9999

nocache

nocycle;

NEXTVAL 和 和 CURRVAL偽列

  • NEXTVAL 返回下一個可用的序列值。它返回一個唯一的值每次引用它的時候,任何用戶都可以引用它

  • CURRVAL得到當(dāng)前的序列值

  • 使用 CURRVAL 之前必須發(fā)出 NEXTVAL

使用序列

插入一個新的部門為“Support” 位置ID為 2500

insert into departments(department_id,

department_name, location_id)

values (dept_deptid_seq.nextval,

'support', 2500);

序列 DEPT_DEPTID_SEQ 顯示當(dāng)前值

select dept_deptid_seq.currval from dual;

緩存序列值 

  • 將序列值緩存到內(nèi)存中,可提高訪問效率

  • 序列在下列情況下出現(xiàn)“斷號”:

      – 發(fā)生回滾

      – 系統(tǒng)崩潰

      – 序列用于其他的表

可以修改序列的增量、最大值、最小值,循環(huán)選項或緩存:

alter sequence dept_deptid_seq

increment by 20

maxvalue 999999

nocache

nocycle;

修改序列的注意事項

  • 必須是序列的擁有者或?qū)π蛄杏?ALTER 權(quán)限

  • 只有將來的序列值會被改變

  • 改變序列的初始值只能通過刪除序列之后重建序列的方法實現(xiàn)

  • 執(zhí)行一些驗證(例如,新的 MAXVALUE小于當(dāng)前的序列號)

使用 DROP 語句刪除序列:

drop sequence dept_deptid_seq;

索引:

是一個方案對象

通過指針加速 Oracle 服務(wù)器的查詢速度

通過使用快速路徑訪問方法來快速定位數(shù)據(jù),可以減少磁盤I/O

索引與表相互獨立

Oracle 服務(wù)器自動使用和維護索引

創(chuàng)建索引:

自動創(chuàng)建:在定義 PRIMARY KEY 或 UNIQUE 約束后系統(tǒng)自動在相應(yīng)的列上創(chuàng)建唯一性索引。

手動創(chuàng)建:用戶可以在其它列上創(chuàng)建非唯一的索引,以加速查詢。

在一列或多列上創(chuàng)建索引語法:

create [unique][bitmap]index index

on table (column[, column]...);

2、在表 EMPLOYEES的 LAST_NAME字段上創(chuàng)建索引,提高查詢訪問速度:

create index emp_last_name_idx on  employees(last_name);

創(chuàng)建索引注意事項

SQL 基礎(chǔ)之創(chuàng)建其他方案對象(十五)

刪除索引

使用 DROP INDEX 命令,從數(shù)據(jù)字典中刪除索引:

drop index index;

從數(shù)據(jù)字典中刪除索引:emp_last_name_idx

drop index emp_last_name_idx;

刪除索引,你必須是索引的擁有者或者擁有 DROP ANY INDEX 權(quán)限。

同義詞

創(chuàng)建對象的同義詞

通過創(chuàng)建同義詞簡化對象訪問(一個對象的另一個名字),使用同義詞您可以:

方便訪問其它用戶的對象

縮短對象名字的長度

創(chuàng)建同義詞語法:

create [public] synonym synonym for object;

創(chuàng)建和刪除同義詞示例

1、為視圖 DEPT_SUM_VU 創(chuàng)建一個較短名稱的同義詞:

create synonym d_sum for dept_sum_vu;

2、刪除同義詞

drop synonym d_sum;

新聞標(biāo)題:SQL基礎(chǔ)之創(chuàng)建其他方案對象(十五)
標(biāo)題鏈接:http://chinadenli.net/article14/ppihge.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站收錄、網(wǎng)站營銷、搜索引擎優(yōu)化、網(wǎng)站設(shè)計、品牌網(wǎng)站制作、響應(yīng)式網(wǎng)站

廣告

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

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