oracle06
1.?Oracle的體系結(jié)構(gòu)?-?了解
1.1.?Oracle數(shù)據(jù)庫和Oracle實(shí)例
Oracle 服務(wù)器軟件部分由兩大部分組成, Oracle 數(shù)據(jù)庫 和 Oracle 實(shí)例。
兩者的解釋如下:
l?Oracle 數(shù)據(jù)庫(物理概念): 位于硬盤上實(shí)際存放數(shù)據(jù)的文件和相應(yīng)的程序文件, 這些文件組織在一起, 成為一個(gè)邏輯整體, 即為 Oracle 數(shù)據(jù)庫. 因此在 Oracle 看來, “數(shù)據(jù)庫” 是指硬盤上文件的邏輯集合, 必須要與內(nèi)存里實(shí)例合作,?才能對外提供數(shù)據(jù)管理服務(wù)。
l?Oracle 實(shí)例(邏輯概念): 位于物理內(nèi)存里的數(shù)據(jù)結(jié)構(gòu). 它由一個(gè)共享的內(nèi)存池和多個(gè)后臺進(jìn)程所組成, 共享的內(nèi)存池可以被所有進(jìn)程訪問. 用戶如果要存取數(shù)據(jù)庫(也就是硬盤上的文件) 里的數(shù)據(jù), 必須通過實(shí)例才能實(shí)現(xiàn), 不能直接讀取硬盤上的文件。實(shí)例的唯一標(biāo)識也稱之為SID(OSID)。
?
一個(gè)實(shí)例只能對應(yīng)一個(gè)數(shù)據(jù)庫,一個(gè)數(shù)據(jù)庫可以有多個(gè)實(shí)例(RAC集群),但大多數(shù)情況下, 一個(gè)數(shù)據(jù)庫上只有一個(gè)實(shí)例對其進(jìn)行操作。我們就是通過連接到實(shí)例來操作數(shù)據(jù)庫的。
1.2.?Oracle常見的存儲文件
常見的存儲文件主要為三類:
l?數(shù)據(jù)文件。存儲數(shù)據(jù)用的。例:表
l?控制文件。記錄數(shù)據(jù)文件存放的位置。例:數(shù)據(jù)庫名稱、數(shù)據(jù)文件名稱及位置。
l?日志文件。記錄數(shù)據(jù)信息變化的。例:因故障問題造成一些數(shù)據(jù)沒有及時(shí)寫入到數(shù)據(jù)文件,可以使用日志文件恢復(fù)
(Oracle日志回滾:如果你的數(shù)據(jù)被delete掉并且提交了,數(shù)據(jù)還是可以恢復(fù)的,可以通過日志來恢復(fù)的)。
?
?
2.?表空間(Tablespace)的管理
2.1.?表空間的概念
ORACLE是屬于文件存儲。ORACLE中的數(shù)據(jù)是存放在一個(gè)個(gè)數(shù)據(jù)文件中,數(shù)據(jù)文件存放在磁盤中。
?
如果說數(shù)據(jù)文件是物理概念,那么表空間就是邏輯概念,Oracle通過表空間來對數(shù)據(jù)文件中的數(shù)據(jù)進(jìn)行CRUD。
表空間是一種邏輯結(jié)構(gòu),是Oracle最大的邏輯單元,可以理解為:所有的數(shù)據(jù)都存儲在表空間中。
表空間的屬性特點(diǎn):
l?一個(gè)數(shù)據(jù)庫可以包含多個(gè)表空間,一個(gè)表空間只能屬于一個(gè)數(shù)據(jù)庫。
l?一個(gè)表空間可以由一個(gè)或多個(gè)數(shù)據(jù)文件組成,一個(gè)數(shù)據(jù)文件只能屬于一個(gè)表空間。
l?表空間可以劃分成更細(xì)的邏輯存儲單元。(了解)
2.2.?數(shù)據(jù)庫的存儲結(jié)構(gòu)--了解
官方數(shù)據(jù)存儲結(jié)構(gòu)圖:
各對象之間的存儲對應(yīng)關(guān)系圖:
l?所有的數(shù)據(jù)庫對象都存儲在表空間中,而表空間被數(shù)據(jù)庫服務(wù)管理。
l?一個(gè)表空間可以對應(yīng)N個(gè)數(shù)據(jù)文件,表空間是邏輯概念,而數(shù)據(jù)文件是物理概念。
l?方案(SCHEMA模式)是表、視圖、索引等數(shù)據(jù)庫對象的邏輯集合,它通過數(shù)據(jù)庫服務(wù)來間接管理這些對象。
l?一個(gè)用戶(user)創(chuàng)建時(shí)會(huì)同時(shí)創(chuàng)建一個(gè)同名的方案(schema),即,你甚至可以認(rèn)為用戶和方案是同一個(gè)東西(事實(shí)上不是,用戶主要是做權(quán)限等相關(guān)管理的)。當(dāng)用戶登錄后,就立刻擁有了該同名方案下所有對象。
l?方案(用戶)和表空間沒有什么必然關(guān)系,一個(gè)方案擁有一個(gè)默認(rèn)的表空間,但同時(shí)可以使用多個(gè)表空間來存儲它的對象。一個(gè)表空間可以為不同的方案來存儲其所屬對象
?
【補(bǔ)充閱讀】下面有個(gè)很形象的比喻,是從網(wǎng)上摘的,不妨一看:
我們可以把database看做是一個(gè)大倉庫,倉庫分了很多很多的房間,schema就是其中的房間,一個(gè)schema代表一個(gè)房間,table可以看做是每個(gè)schema中的床,table被放入每個(gè)房間中,不能放置在房間之外,那豈不是晚上睡覺無家可歸了,然后床上可以放置很多物品,就好比table上可以放置很多列和行一樣,數(shù)據(jù)庫中存儲數(shù)據(jù)的基本單元是table,顯示中每個(gè)倉庫放置物品的基本單位就是床,user就是每個(gè)schema的主人,(所以schema包含的是object,而不是user),user和schema是一一對應(yīng)的,每個(gè)user在沒有特別指定下只能使用自己schema的東西,如果一個(gè)user想使用其他schema的東西,那就要看那個(gè)schema的user有沒有給你這個(gè)權(quán)限了,或者看這個(gè)倉庫的老大(DBA)有沒有給你這個(gè)權(quán)限了。換句話說,如果你是某個(gè)倉庫的主人,那么這個(gè)倉庫的使用權(quán)和倉庫中的所有東西都是你的,你有完全的操作權(quán),可以扔掉不用東西從每個(gè)房間,也可以防止一些有用的東西到某個(gè)房間,你還可以給每個(gè)user分配具體的權(quán)限,也就是他到某一個(gè)房間能做些什么,是只能看(read-only),還是可以像主人一樣有所有控制權(quán)(R/W),這個(gè)就要看這個(gè)user所對應(yīng)的角色Role了。
?
數(shù)據(jù)操作的過程:
【小結(jié)】
表空間:屬于一種邏輯結(jié)構(gòu)。記錄物理文件的邏輯單位。是Oracle最大的邏輯單位.
也就是說,我們所有的數(shù)據(jù)都存儲在表空間中.
?
2.3.?常見的表空間分類—了解
l?(永久)數(shù)據(jù)表空間?,?主要用來永久存儲正式的數(shù)據(jù)文件。
l?臨時(shí)數(shù)據(jù)表空間,主要用來存儲臨時(shí)數(shù)據(jù)的,比如數(shù)據(jù)的排序、分組等產(chǎn)生的臨時(shí)數(shù)據(jù),不能存放永久性對象。
l?UNDO表空間,保存數(shù)據(jù)修改前的鏡象。
?
臨時(shí)表空間和UNDO表空間的異同:(了解)
l?相同之處:兩者都不會(huì)永久保存數(shù)據(jù)。
l?不同之處:UNDO表空間用于存放UNDO數(shù)據(jù),當(dāng)執(zhí)行DML操作時(shí),oracle會(huì)將這些操作的舊數(shù)據(jù)寫入到UNDO段,以保證可以回滾和事務(wù)隔離讀取等,主要用于數(shù)據(jù)的修改等;而臨時(shí)表空間主要用來做查詢和存放一些緩沖區(qū)數(shù)據(jù)。
2.4.?Oracle對表空間的管理方式—了解
字典管理:全庫所有的空間分配都放在數(shù)據(jù)字典中。容易引起字典爭用,而導(dǎo)致性能問題。
本地管理:空間分配不放在數(shù)據(jù)字典,而在每個(gè)數(shù)據(jù)文件頭部的第3到第8個(gè)塊的位圖塊,來管理空間分配。oracle公司推薦使用本地管理表空間。
2.5.?表空間的創(chuàng)建
注:表空間的創(chuàng)建一般是由DBA來操作完成的,而且需要管理員權(quán)限(我們一般用sys)。
三種表空間中,UNDO表空間通常是由Oracle自動(dòng)化管理的,而另外兩種表空間則一般需要手動(dòng)創(chuàng)建。
【常用參數(shù)語法】:
--創(chuàng)建永久數(shù)據(jù)表空間 CREATE TABLESPACE TABLESPACE_NAME [DATAFILE DATAFILE1,[DATAFILE 2]…] [LOGGING | NOLOGGING] [ONLINE|OFFLINE] [EXTENT_MANAGEMENT_CLAUSE]參數(shù)說明: ?TABLESPACE_NAME,表空間名稱隨意,但最好遵循一定的規(guī)范,如tbl_itcast18_dat、tbl_itcast18_tmp等。 ?DATAFILE,表空間的類型 ?DATAFILE1 數(shù)據(jù)文件需要有如下格式:文件名 SIZE 初始文件大小 [AUTOEXTEND OFF| ON] [MAXSIZE|NEXT SIZE MAXSIZE SIZE] ?文件名是數(shù)據(jù)文件的路徑名,可以是絕對路徑,也可以是相對路徑,如“路徑\xxx.dbf”,注意路徑必須先建立好。 ?初始化文件大小,是數(shù)據(jù)文件剛建立起來的時(shí)候所占物理磁盤空間的大小; ?AUTOEXTEND,是否自動(dòng)擴(kuò)展數(shù)據(jù)文件的大小,OFF表示關(guān)閉自動(dòng)擴(kuò)展,數(shù)據(jù)文件只能是初始大小,ON表示開啟自動(dòng)擴(kuò)展,當(dāng)數(shù)據(jù)文件超過初始大小的時(shí)候,會(huì)自動(dòng)增大。默認(rèn)值為OFF。 ?如果設(shè)置自動(dòng)擴(kuò)展,則需要設(shè)置最大值MAXSIZE,如設(shè)置2000m,當(dāng)然也可以設(shè)置為UNLIMITED,表示無限表空間。如果要指定每次擴(kuò)展的大小,可以使用NEXT SIZE MAXSIZE SIZE語法,表示每次擴(kuò)展多少尺寸,最大能擴(kuò)展到多大(大小上限)。 ?[LOGGING | NOLOGGING]該子句用來聲明這個(gè)表空間上所有的用戶對象的日志屬性,即當(dāng)操作包括表,索引,分區(qū),物化視圖,物化視圖上的索引,分區(qū)等是否記錄日志。缺省值為LOGGING。 ?[ONLINE|OFFLINE]表空間的狀態(tài),ONLINE表示表空間創(chuàng)建后立即有效,OFFLINE表示表空間創(chuàng)建后暫時(shí)無效,即不能使用,只有設(shè)置為ONLINE后才有效,默認(rèn)值為ONLINE。 ?EXTENT_MANAGEMENT_CLAUSE表空間如何管理范圍,推薦設(shè)置為本地管理,值為EXTENT MANAGEMENT LOCAL,如果不指定該值,則ORACLE會(huì)根據(jù)初始化時(shí)內(nèi)部的其他參數(shù)進(jìn)行自動(dòng)設(shè)置一個(gè)默認(rèn)值,生產(chǎn)環(huán)境下建議指定該值為本地管理。--創(chuàng)建臨時(shí)數(shù)據(jù)表空間 CREATE TEMPORARY TABLESPACE TABLESPACE_NAME TEMPFILE DATAFILE1,[DATAFILE 2]… EXTENT_MANAGEMENT_CLAUSE 參數(shù)說明: ?DATAFILE1數(shù)據(jù)文件的格式語法:文件名 SIZE 初始文件大小,注意臨時(shí)數(shù)據(jù)表空間的數(shù)據(jù)文件一般不需要指定最大值,Oracle對其采用了貪吃算法策略,因此,該表空間會(huì)自動(dòng)逐漸增大。當(dāng)然你也可以手動(dòng)指定。 ?其他參數(shù)見永久數(shù)據(jù)表空間的。 ?臨時(shí)表空間默認(rèn)是不記日志的。【最簡語法】
Create tablespace 表空間名稱 表空間類型 ‘物理文件全路徑’ Size 初始文件大小【示例】
永久數(shù)據(jù)表空間和臨時(shí)數(shù)據(jù)表空間的建立。
--建立一個(gè)數(shù)據(jù)表空間。 CREATE TABLESPACE tbl_itcast_dat DATAFILE 'D:\Applications\Oracle\mydata\itcast_dat01.dbf' SIZE 50m AUTOEXTEND ON NEXT 5m MAXSIZE 2000m EXTENT MANAGEMENT LOCAL--創(chuàng)建臨時(shí)數(shù)據(jù)表空間。 CREATE TEMPORARY TABLESPACE tbl_itcast_tmp TEMPFILE 'D:\Applications\Oracle\mydata\itcast__tmp.dbf' SIZE 20m EXTENT MANAGEMENT LOCAL解釋:
【提示】:
文件路徑(data目錄)必須提前存在,否則:
注意:實(shí)際企業(yè)開發(fā)中,不要用最簡化的方式來進(jìn)行表空間的創(chuàng)建。
【參考示例1】
--創(chuàng)建數(shù)據(jù)表空間 CREATE TABLESPACE TBS_CSP_BS_DAT DATAFILE '/dev/rlv_dat001' SIZE 2000M REUSE AUTOEXTEND OFF, LOGGING ONLINE PERMANENT EXTENT MANAGEMENT LOCAL; --創(chuàng)建臨時(shí)數(shù)據(jù)表空間 CREATE TEMPORARY TABLESPACE TBS_CSP_BS_TMP TEMPFILE '/dev/rlv_dat009' SIZE 2000M REUSE AUTOEXTEND OFF EXTENT MANAGEMENT LOCAL UNIFORM SIZE 10M;注:PERMANENT是顯式的指定創(chuàng)建的是永久的表空間,用來存放永久對象。默認(rèn)值。
【參考示例2】
--創(chuàng)建數(shù)據(jù)表空間 create tablespace tbs_user_data logging datafile 'D:\oracle\oradata\Oracle9i\user_data.dbf' size 50m autoextend on next 50m maxsize 20480m extent management local; --創(chuàng)建臨時(shí)數(shù)據(jù)表空間 create temporary tbs_user_temp tempfile 'D:\oracle\oradata\Oracle9i\user_temp.dbf' size 50m autoextend on next 50m maxsize 20480m extent management local;2.6.?刪除表空間
語法:
【示例】
--刪除表空間以及下面所有數(shù)據(jù)和數(shù)據(jù)文件(全刪,寸草不生) DROP TABLESPACE tbl_itcast_tmp INCLUDING CONTENTS AND DATAFILES; 提示:如果不加后面的一堆,則,只是將表空間進(jìn)行了邏輯刪除(Oracle無法管理使用這個(gè)表空間了,但數(shù)據(jù)文件還存在)。2.7.?表空間的一個(gè)應(yīng)用
【示例】
建立表的時(shí)候指定表空間。
企業(yè)開發(fā)中,一定不要用默認(rèn)的表空間,一定使用要指定表空間。
最簡的一個(gè)建表腳本:
注意:
寫建表的語句的時(shí)候,可以指定存儲的表空間,但不建議指定表空間的參數(shù)。
?
3.?用戶和權(quán)限
3.1.?用戶角色權(quán)限的關(guān)系
預(yù)備知識:
3.2.?預(yù)定義用戶(賬戶)
Oracle預(yù)定義有很多用戶,用于不同的用途。這些用戶大都默認(rèn)是禁用的(如scott,hr等),但有兩個(gè)最重要的用戶是默認(rèn)開啟的,這兩個(gè)用戶就是SYS和SYSTEM。
l?SYS 帳戶(數(shù)據(jù)庫擁有者):
n?擁有 DBA 角色權(quán)限
n?擁有 ADMIN OPTION ?的所有權(quán)限
n?擁有 startup, shutdown, 以及若干維護(hù)命令
n?擁有數(shù)據(jù)字典
l?SYSTEM 帳戶
n?擁有 DBA 角色權(quán)限.
注意:這些帳戶通常不用于常規(guī)操作。
Sys和system賬戶的區(qū)別:
l?sys用戶是數(shù)據(jù)庫的擁有者,是系統(tǒng)內(nèi)置的、權(quán)限最大的超級管理員帳號。
l?system用戶只是擁有DBA角色權(quán)限的一個(gè)管理員帳號,其實(shí)它還是歸屬于普通用戶。
3.3.?操作用戶
l?創(chuàng)建用戶的語句
create user ?用戶名
identified by ?密碼(不要加引號)
default tablespace 默認(rèn)表空間名 quota 5M on 默認(rèn)表空間名
[temporary tablespace 臨時(shí)表空間名]
[profile 配置文件名] ?????????????????????????????????????????//配置文件
[default role 角色名] ???????????????????????????????????????//默認(rèn)角色
[password expire] ????????????????????????????????????????????//密碼失效
//如果設(shè)置失效,那么第一次登錄的時(shí)候,會(huì)提醒你更改密碼。
[account lock] ??????????????????????????????????????????????????//賬號鎖定(停用)
l?修改用戶
alter user 用戶名 identified by 密碼 quota 10M on 表空間名
alter user 用戶名 account lock/unlock
l?刪除用戶
drop user 用戶名 [cascade].如果要?jiǎng)h除的用戶中有模式對象,必須使用cascade.
【示例】最簡方式創(chuàng)建一個(gè)用戶
切換到sys用戶下:
注:未指定的參數(shù)都采用默認(rèn)值。
【示例】借助工具創(chuàng)建一個(gè)用戶
創(chuàng)建用戶的時(shí)候指定的表空間,會(huì)成為以后在該用戶下建立對象(表)的默認(rèn)存儲表空間。
-- 語句:Create the user /*創(chuàng)建用戶并指定表空間 */ create user itcast19identified by itcast19default tablespace TBL_ITCAST19_DATtemporary tablespace TBL_ITCAST19_TMP; --上鎖解鎖改密碼等注意:
一般企業(yè)開發(fā)中,建表要手動(dòng)指定表空間,可以讓不同模塊、不同功能的對象存儲在不同的數(shù)據(jù)文件中,可以提高性能。
【示例】刪除用戶
--刪除用戶及其下面所有的對象
drop user itcasttest cascade;
提示,每個(gè)數(shù)據(jù)庫用戶帳戶具備:
l?一個(gè)唯一的用戶名
l?一個(gè)驗(yàn)證方法
l?一個(gè)默認(rèn)的表空間
l?一個(gè)臨時(shí)表空間
l?權(quán)限和角色
l?每個(gè)表空間的配額.
?
3.4.?配置角色和權(quán)限
使用上面創(chuàng)建的用戶登錄測試:
結(jié)果報(bào)錯(cuò)。
提示說:該用戶沒有創(chuàng)建會(huì)話的權(quán)限,登錄被拒絕。
?
那該如何賦權(quán)呢?賦什么權(quán)限呢?
Oracle內(nèi)置有大量的權(quán)限屬性:
常見權(quán)限:
我們可以將create session權(quán)限賦權(quán)給新建的用戶.新建的用戶就可以登錄了.
我們再建立一張表看看:
結(jié)果又提示是權(quán)限不足。= =...
再添加建表的權(quán)限:
再次測試建表:
再添加一條數(shù)據(jù)看看:
竟然又沒有權(quán)限!。。。
?
結(jié)論:這樣一個(gè)個(gè)添加權(quán)限非常的麻煩!
是否可以使用比較簡單的方式將普通用戶的權(quán)限賦予給一個(gè)用戶呢?
可以!通過預(yù)定義內(nèi)置角色就可以實(shí)現(xiàn)。
需要分配 unlimited tablespaces 權(quán)限
?
如何選擇預(yù)定義的角色呢?
普通用戶就選擇:connect和Resource角色即可。
管理員用戶選擇:connect和Resource、dba角色。
?
/*給用戶授予權(quán)限 */ grant connect,resource to username;?
再次登錄、各種操作測試,均正常了!
【提示】
如果遇到這個(gè)錯(cuò)誤:
?
說明當(dāng)前用戶沒有操作該表空間的權(quán)限,需要手動(dòng)加入這個(gè)權(quán)限:
?
梳理回顧建立一個(gè)普通用戶的過程:
1.創(chuàng)建用戶—2.賦權(quán)限(connect和resourece角色)
3.5.?Oracle用戶(user)和方案(schema)
幾個(gè)概念:
l?方案就是屬于某一用戶的所有對象(表、視圖等)的集合.
l?用戶名和方案名往往是通用的.
l?一個(gè)用戶只能關(guān)聯(lián)一個(gè)方案.
l?創(chuàng)建用戶時(shí)系統(tǒng)會(huì)自動(dòng)創(chuàng)建一個(gè)同名方案(schema)
提示:
Scott用戶的方案名也是scott,因此,后面我們將這兩個(gè)概念放在一起用,即我們可以說,某表是scott用戶下的對象,也可以說是scott方案下的對象。
3.6.?跨域訪問對象
跨域訪問也稱之為跨用戶訪問、跨方案訪問,訪問的方式為:用戶名.對象名,
?
如在itcast用戶下訪問scott用戶下的emp表的數(shù)據(jù):
原因:itcast用戶沒有對scott用戶的對象訪問權(quán)限。
Oracle用戶的權(quán)限分為兩種:
l?系統(tǒng)權(quán)限(System Privilege): 允許用戶執(zhí)行對于數(shù)據(jù)庫的特定行為,例如:創(chuàng)建表、創(chuàng)建用戶等
l?對象權(quán)限(Object Privilege): 允許用戶訪問和操作一個(gè)特定的對象,例如:對其他方案下的表的查詢
【示例】需求:itcast用戶要讀取scott用戶中emp表的數(shù)據(jù)。
--賦予權(quán)限的Sql語句:
--itcast用戶登錄測試:
再次查詢scott用戶的emp表,可以查詢
注意:
賦權(quán)的時(shí)候,只能是自己擁有的權(quán)限、或者該權(quán)限是可以傳遞的,才可以將其賦予別人。
?
1.?視圖VIEW
問題:
Itcast用戶現(xiàn)在只需要查詢10部門的員工數(shù)據(jù)就行了,scott也不想將所有數(shù)據(jù)都開放給itcast用戶。
?
1.1.?視圖的概念和作用
概念:
l?視圖是一種虛表.
l?視圖建立在已有表的基礎(chǔ)上, 視圖賴已建立的這些表稱為基表。
l?向視圖提供數(shù)據(jù)內(nèi)容的語句為 SELECT 語句, 可以將視圖理解為存儲起來的 SELECT 語句.
l?視圖向用戶提供基表數(shù)據(jù)的另一種表現(xiàn)形式
作用:
1.2.?語法
語法:create?VIEW 視圖名稱?as??select···(查詢語句)
提示:
子查詢可以是任意復(fù)雜的 SELECT 語句。
語法詳細(xì)分析:
?
糾正:默認(rèn)值不是只讀。
?
1.3.?操作視圖
視圖只能創(chuàng)建、替換和刪除,不能修改。
1.3.1.?創(chuàng)建視圖
【示例】創(chuàng)建10號部門的視圖
--sql語句建立視圖 CREATE VIEW v_emp10 AS SELECT * FROM emp WHERE deptno=10;提示:如果提示權(quán)限不足而導(dǎo)致無法添加視圖,則需要添加權(quán)限,一般為學(xué)習(xí)方便,我們會(huì)直接添加dba角色權(quán)限。
--切換到sys用戶下,為scott添加dba權(quán)限:
1.3.2.?查詢視圖
【示例】查詢視圖
【示例】視圖的真實(shí)內(nèi)容查看
結(jié)論:可以看出,視圖的本質(zhì)就是sql語句。
?
1.3.3.?替換視圖
?
視圖沒有修改功能。
?
【示例】要將視圖改為可以查詢10號部門的員工信息且工資要大于2000:
CREATE OR REPLACE VIEW v_emp10 AS SELECT * FROM emp WHERE deptno=10 AND sal >2000;提示:
平時(shí)我們在編寫建立視圖的語句時(shí)候,一般直接把replace加上,即直接CREATE?OR?REPLACE。(沒有就創(chuàng)建,有就替換)
?
1.3.4.?刪除視圖
?
【示例】刪除10號部門的這個(gè)視圖
DROP VIEW v_emp10; SELECT * FROM v_emp10;1.4.?幾個(gè)參數(shù)說明
--先創(chuàng)建視圖再創(chuàng)建表:一般用的不多,一般我們都是先有表再創(chuàng)建視圖。 CREATE OR REPLACE FORCE VIEW v_test2015 AS SELECT * FROM test2015;SELECT * FROM v_test2015--視圖默認(rèn)情況下和表一樣,擁有表類似的功能,可以crud SELECT t.*,ROWID FROM v_emp10 t;SELECT * FROM emp;CREATE OR REPLACE VIEW v_emp10 AS SELECT * FROM emp WHERE deptno=10 WITH CHECK OPTION;--數(shù)據(jù)的增加和修改,必須滿足子查詢的條件--一般視圖,我們主要用來查詢的,一般不維護(hù)它。 CREATE OR REPLACE VIEW v_emp10 AS SELECT * FROM emp WHERE deptno=10 WITH READ ONLY;1.5.?只讀視圖
一般情況下,視圖主要用來提供查詢的,并不希望用戶去修改它,因此,我們可以創(chuàng)建只讀視圖。
創(chuàng)建只讀視圖只需要添加with read only 選項(xiàng)即可,這樣就可以屏蔽對視圖的DML操作。
?
【示例】將已有的視圖修改為只讀視圖
CREATE OR REPLACE VIEW v_emp_dept10 AS SELECT * FROM emp WHERE deptno=10 AND sal >2000 WITH READ ONLY ;友情提示:
其實(shí),很多大的系統(tǒng)中,比如銀行,某些客戶會(huì)告訴你,這個(gè)表存這個(gè)數(shù)據(jù),那個(gè)表存哪個(gè)數(shù)據(jù),但實(shí)際上,可能不是真正的表,而是視圖,而且還是只讀的。
為什么給視圖?原因是:
如果是存錢的表,那么放開給你,是不是非常危險(xiǎn)。如果業(yè)務(wù)需要確實(shí)是需要更改這個(gè)表的數(shù)據(jù)呢?一般來調(diào)用存儲過程(一般有提供,有一定特定功能,還能記錄日志)來改表,為了安全!不能直接改表。
1.6.?跨域訪問視圖
【示例】只放開scott下的emp表的部分?jǐn)?shù)據(jù)給itcast14用戶查詢,開放的數(shù)據(jù)要求為:20號部門的員工,字段只顯示員工號和姓名,且要求這兩個(gè)字段的標(biāo)題顯示為中文。(要求本例使用工具來操作)
?
--在scott下創(chuàng)建視圖(視圖名稱參考為:v_emp_dept20) --將生成的腳本如下: create or replace view v_emp_dept20 asselect empno "編號",ename "姓名"from empwhere deptno=20 WITH READ ONLY;--scott下查詢驗(yàn)證一下: SELECT * FROM v_emp_dept20;--將該視圖賦予itcast用戶:在scott用戶下操作: grant select on v_emp_dept20 to itcast;--切換到itcast用戶下進(jìn)行查詢驗(yàn)證: Select * from scott.v_emp_dept20;
另外補(bǔ)充:
視圖可以屏蔽篩選不同字段、字段名稱等,因此,你看到的時(shí)候的字段也未必是真實(shí)表中存在的!
CREATE OR REPLACE VIEW v_emp10 AS SELECT empno 編號,ename empname FROM emp WHERE deptno=10 WITH READ ONLY;1.7.?視圖小結(jié)
視圖和表的區(qū)別:
視圖是實(shí)體表的映射,視圖和實(shí)體表區(qū)別就是于視圖中沒有真實(shí)的數(shù)據(jù)存在。
什么時(shí)候使用視圖:
1,?在開發(fā)中,有一些表結(jié)構(gòu)是不希望過多的人去接觸,就把實(shí)體表映射為一個(gè)視圖。
2,?在項(xiàng)目過程中,程序人員主要關(guān)注編碼的性能、業(yè)務(wù)分析這方面。對于一些復(fù)雜的SQL語句,設(shè)計(jì)人員會(huì)提前把這些語句封裝到一個(gè)視圖中,供程序人員去調(diào)用
注意:在企業(yè)中,你查詢的對象(表)他可能不是一張的表,可能是視圖;你看到的視圖的字段可能也不是真實(shí)的字段。
?
1.?同義詞SYNONYM
問題:我們想偽裝一下這個(gè)視圖的名字,或者是嫌調(diào)用的這個(gè)對象名字太長,怎么辦?
1.1.?同義詞的概念和作用
同義詞就是(對象的)別名,可以對表、視圖等對象起個(gè)別名,然后通過別名就可以訪問原來的對象了。
作用:
l?方便訪問其它用戶的對象
l?縮短對象名字的長度
1.2.?語法
1.3.?操作同義詞
同義詞只有創(chuàng)建和刪除操作。
【需求】在itcast用戶下為視圖scott.v_emp_dept20創(chuàng)建一個(gè)同義詞emp20;
友情提示:
如果工作中,你遇到一張”表”來查詢數(shù)據(jù),那么它一定是表么?不一定,可能是視圖,也可能是同義詞.
另外,任何對象都能起別名。下面的例子對emp表起個(gè)別名:
重點(diǎn):
?
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/dongfangshenhua/p/7087732.html
總結(jié)
- 上一篇: java导入、导出Excel文件
- 下一篇: Django入门实战【3步曲】