婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Oracle數(shù)據(jù)操作和控制語言詳解

Oracle數(shù)據(jù)操作和控制語言詳解

熱門標(biāo)簽:百變地圖標(biāo)注 語音電話機(jī)器人缺點(diǎn) 語音電話機(jī)器人營銷方案 修改高德地圖標(biāo)注 廣州市400電話辦理 南通防封外呼系統(tǒng)運(yùn)營商 地圖標(biāo)注原件 宜賓外呼系統(tǒng)廠家 淮安自動(dòng)外呼系統(tǒng)開發(fā)
正在看的ORACLE教程是:Oracle數(shù)據(jù)操作和控制語言詳解。

SQL語言共分為四大類:數(shù)據(jù)查詢語言DQL,數(shù)據(jù)操縱語言DML, 數(shù)據(jù)定義語言DDL,數(shù)據(jù)控制語言DCL。其中用于定義數(shù)據(jù)的結(jié)構(gòu),比如 創(chuàng)建、修改或者刪除數(shù)據(jù)庫;DCL用于定義數(shù)據(jù)庫用戶的權(quán)限;在這篇文章中我將詳細(xì)講述這兩種語言在Oracle中的使用方法。 

  DML語言

  DML是SQL的一個(gè)子集,主要用于修改數(shù)據(jù),下表列出了ORACLE支持的DML語句。


  插入數(shù)據(jù)

  INSERT語句常常用于向表中插入行,行中可以有特殊數(shù)據(jù)字段,或者可以用子查詢從已存在的數(shù)據(jù)中建立新行。

  列目錄是可選的,缺省的列的目錄是所有的列名,包括comlumn_id,comlumn_id可以在數(shù)據(jù)字典視圖ALL_TAB_COLUMNS,USER_TAB_COLUMNS,或者DBA_TAB_COLUMNS中找到。

  插入行的數(shù)據(jù)的數(shù)量和數(shù)據(jù)類型必須和列的數(shù)量和數(shù)據(jù)類型相匹配。不符合列定義的數(shù)據(jù)類型將對插入值實(shí)行隱式數(shù)據(jù)轉(zhuǎn)換。NULL字符串將一個(gè)NULL值插入適當(dāng)?shù)牧兄小jP(guān)鍵字NULL常常用于表示將某列定義為NULL值。

  下面的兩個(gè)例子是等價(jià)的。




  或


  更新數(shù)據(jù)

  UPDATE命令用于修改表中的數(shù)據(jù)。


  刪除數(shù)據(jù)

  DELETE語句用來從表中刪除一行或多行數(shù)據(jù),該命令包含兩個(gè)語句:

   1、關(guān)鍵字DELETE FROM后跟準(zhǔn)備從中刪除數(shù)據(jù)的表名。

   2、WHERE后跟刪除條件


  清空表

  如果你想刪除表中所有數(shù)據(jù),清空表,可以考慮使用DDL語言的TRUNCATE語句。TRUNCATE就像沒有WHERE子句的DELETE命令一樣。TRUNCATE將刪除表中所有行。TRUNCATE不是DML語句是DDL語句,他和DELETE右不同的特點(diǎn)。


  STORAGE子串是可選的,缺省是DROP STORAGE。當(dāng)使用DROP STORAGE時(shí)將縮短表和表索引,將表收縮到最小范圍,并重新設(shè)置NEXT參數(shù)。REUSE STORAGE不會(huì)縮短表或者調(diào)整NEXT參數(shù)。

  TRUNCATE和DELETE有以下幾點(diǎn)區(qū)別

  1、TRUNCATE在各種表上無論是大的還是小的都非常快。如果有ROLLBACK命令DELETE將被撤銷,而TRUNCATE則不會(huì)被撤銷。

  2、TRUNCATE是一個(gè)DDL語言,向其他所有的DDL語言一樣,他將被隱式提交,不能對TRUNCATE使用ROLLBACK命令。

  3、TRUNCATE將重新設(shè)置高水平線和所有的索引。在對整個(gè)表和索引進(jìn)行完全瀏覽時(shí),經(jīng)過TRUNCATE操作后的表比DELETE操作后的表要快得多。

  4、TRUNCATE不能觸發(fā)任何DELETE觸發(fā)器。

  5、不能授予任何人清空他人的表的權(quán)限。

  6、當(dāng)表被清空后表和表的索引講重新設(shè)置成初始大小,而delete則不能。

  7、不能清空父表。

  SELECT FOR UPDATE

  select for update語句用于鎖定行,阻止其他用戶在該行上修改數(shù)據(jù)。當(dāng)該行被鎖定后其他用戶可以用SELECT語句查詢該行的數(shù)據(jù),但不能修改或鎖定該行。

  鎖定表

  LOCK語句常常用于鎖定整個(gè)表。當(dāng)表被鎖定后,大多數(shù)DML語言不能在該表上使用。LOCK語法如下:


  其中l(wèi)ock_mode有兩個(gè)選項(xiàng):

   share 共享方式

   exclusive 唯一方式

  例:


  死鎖

  當(dāng)兩個(gè)事務(wù)都被鎖定,并且互相都在等待另一個(gè)被解鎖,這種情況稱為死鎖。

  當(dāng)出現(xiàn)死鎖時(shí),ORACLE將檢測死鎖條件,并返回一個(gè)異常。

[NextPage]

事務(wù)控制

  事務(wù)控制包括協(xié)調(diào)對相同數(shù)據(jù)的多個(gè)同步的訪問。當(dāng)一個(gè)用戶改變了另一個(gè)用戶正在使用的數(shù)據(jù)時(shí),oracle使用事務(wù)控制誰可以操作數(shù)據(jù)。

  事務(wù)

  事務(wù)表示工作的一個(gè)基本單元,是一系列作為一個(gè)單元被成功或不成功操作的SQL語句。在SQL和PL/SQL中有很多語句讓程序員控制事務(wù)。程序員可以:

   1、顯式開始一個(gè)事物,選擇語句級一致性或事務(wù)級一致性

   2、設(shè)置撤銷回滾點(diǎn),并回滾到回滾點(diǎn)
 
   3、完成事務(wù)永遠(yuǎn)改變數(shù)據(jù)或者放棄修改。
  
  事務(wù)控制語句


  例:


  Savepoint 和 部分回滾(Partial Rollback)

  在SQL和PL/SQL中Savepoint是在一事務(wù)范圍內(nèi)的中間標(biāo)志。經(jīng)常用于將一個(gè)長的事務(wù)劃分為小的部分。保留點(diǎn)Savepoint可標(biāo)志長事務(wù)中的任何點(diǎn),允許可回滾該點(diǎn)之后的操作。在應(yīng)用程序中經(jīng)常使用Savepoint;例如一過程包含幾個(gè)函數(shù),在每個(gè)函數(shù)前可建立一個(gè)保留點(diǎn),如果函數(shù)失敗,很容易返回到每一個(gè)函數(shù)開始的情況。在回滾到一個(gè)Savepoint之后,該Savepoint之后所獲得的數(shù)據(jù)封鎖被釋放。為了實(shí)現(xiàn)部分回滾可以用帶TO Savepoint子句的ROLLBACK語句將事務(wù)回滾到指定的位置。

  例


  關(guān)鍵字SAVEPOINT是可選的,所以下面兩個(gè)語句是等價(jià)的:


  一致性和事務(wù)

  一致性是事物控制的關(guān)鍵慨念。掌握了oracle 的一致性模型,能使您更好的,更恰當(dāng)?shù)氖褂檬聞?wù)控制。oracle通過一致性保證數(shù)據(jù)只有在事務(wù)全部完成后才能被用戶看見和使用。這項(xiàng)技術(shù)對多用戶數(shù)據(jù)庫有巨大的作用。

  oracle常常使用語句級(state-level)一致性,保證數(shù)據(jù)在語句的生命期之間是可見的但不能被改變。事務(wù)由多個(gè)語句組成,當(dāng)使用事務(wù)時(shí),事物級(transaction-level)一致性在整個(gè)事務(wù)生命期中保證數(shù)據(jù)對所有語句都是可見的。

  oracle通過SCN(syatem change number)實(shí)施一致性。一個(gè)SCN是一個(gè)面向時(shí)間的數(shù)據(jù)庫內(nèi)部鍵。SCN只會(huì)增加不會(huì)減少,SCN表示了時(shí)間上的一個(gè)點(diǎn),每個(gè)數(shù)據(jù)塊都有一個(gè)SCN,通過比較這個(gè)點(diǎn)實(shí)施操作。

  事務(wù)級一致性

  SET TRANSACTION 的一個(gè)作用是確保事務(wù)級一致或語句級一致中有一個(gè)實(shí)施。ORACLE使用這些術(shù)語:

   ISOLATION LEVEL READ COMMIT 表示語句級一致

   ISOLATION LEVEL SERIALIZABLE 表示事務(wù)級一致。

  例:


  下面的語句也能確保事務(wù)級一致:


  任何企圖在只讀(READ ONLY)事務(wù)中修改數(shù)據(jù)的操作都會(huì)拋出一個(gè)異常。但是,READ ONLY事務(wù)只能在下列語句中使用:


  即使沒有改變?nèi)魏螖?shù)據(jù),READ ONLY事務(wù)依然必須使用一個(gè)COMMIT或ROLLBACK以結(jié)束整個(gè)事務(wù)。

  SET TRANSCTION的另外一個(gè)應(yīng)用是在回滾時(shí)直接使用回滾段(ROLLBACK SEGMENT)。回滾段是ORACLE的一個(gè)特殊的數(shù)據(jù)對象,回滾段的頭部包含正在使用該回滾段事務(wù)的信息。當(dāng)用戶回滾事務(wù)(ROLLBACK)時(shí),ORACLE將會(huì)利用回滾段中的數(shù)據(jù)前影像來將修改的數(shù)據(jù)恢復(fù)到原來的值。oracle用round-robin給事務(wù)隨機(jī)分配回滾段。一個(gè)大的事務(wù)可以分配任何回滾段,這也許會(huì)導(dǎo)致回滾段的大小變得很大。因此要避免讓大的事務(wù)隨機(jī)分配回滾段。

  事務(wù)以SET TRANSACTION開始,象下面這樣:


  rb_large是一個(gè)大的回滾段的名稱,現(xiàn)在就給一個(gè)大的事務(wù)分配了一個(gè)大的回滾段,其他的小的回滾段將不由動(dòng)態(tài)空間管理,這樣就更有效率。

  下面我們看一個(gè)例子.我們有一個(gè)回滾段表空間大小是2G,在高峰時(shí)期需要10個(gè)回滾段以滿足用戶的需要,這些高峰在線用戶只有小的事務(wù)。一周我們連續(xù)運(yùn)行了4個(gè)大的事務(wù),這些事務(wù)需要?jiǎng)h除和加載數(shù)據(jù),每一個(gè)撤銷需要1G,回滾段的大小如下:


  所有的都非常恰當(dāng)?shù)陌才旁?/p>

[1] [2] [3] 下一頁

正在看的ORACLE教程是:Oracle數(shù)據(jù)操作和控制語言詳解。2G的表空間中,如果我們?nèi)笔〉膔ound-robin給事務(wù)分配回滾段,4個(gè)大事務(wù)將有4個(gè)獨(dú)立的回滾段,每個(gè)回滾段的大小將是1G,如果這樣我們的2G表空間就不夠,而數(shù)據(jù)庫管理員就不得不在夜晚2點(diǎn)起來工作,每個(gè)事務(wù)都由以下面的語句開始:


  現(xiàn)在 4個(gè)事務(wù)重用相同的表空間,保正4個(gè)回滾段的表空間在2G以內(nèi)。數(shù)據(jù)庫管理員可以睡到天亮。

[NextPage]

建立和修改用戶

  CREATE USER 語句將建立一個(gè)用戶。當(dāng)一個(gè)用戶連接到ORACLE數(shù)據(jù)庫時(shí),它必須被驗(yàn)證。ORACLE中驗(yàn)證有三種類型:

   Database

   external

   Global

  缺省是數(shù)據(jù)庫驗(yàn)證,當(dāng)用戶連接到數(shù)據(jù)庫時(shí),oracle將檢測用戶是否是數(shù)據(jù)庫的合法用戶,并且要提供正確的password.external驗(yàn)證,oracle將只檢測用戶是否是合法用戶,password已經(jīng)被網(wǎng)絡(luò)或系統(tǒng)驗(yàn)證了。global驗(yàn)證也是只檢測是否是合法用戶,password由oraclesecurity server驗(yàn)證。

  Database驗(yàn)證用戶賬號

  數(shù)據(jù)庫驗(yàn)證賬號是張好的缺省類型,也是最普通的類型。建立一個(gè)賬號是piyush,口令是welcome的賬號,只需執(zhí)行下面的命令:


  piyush可以通過下面的語句將口令改變?yōu)閟araswatt:


  外部驗(yàn)證用戶賬號

  用戶賬號進(jìn)入數(shù)據(jù)庫時(shí)可以不提供口令,這種情況下代替數(shù)據(jù)庫識別口令的是客戶端操作系統(tǒng)。外部驗(yàn)證賬號有時(shí)也叫OPS$賬號,當(dāng)他們最初在oracle6開始介紹時(shí),oracle賬號都有關(guān)鍵字前綴OPS$,這也就是為什么init.ora 參數(shù)os_authent_prefix是OPS$--默認(rèn)特征與oracle6保持一致。os_authent_prefix定義的字符串必須被預(yù)處理為用于Oracle外部識別賬號的操作系統(tǒng)賬號名。創(chuàng)建操作系統(tǒng)用戶appl的語句是:


  但在通常情況下,os_authent_prefix將被設(shè)置為空,像下面這樣:


  這樣效果是一樣的,關(guān)鍵字IDENTIFIED EXTERNALLY告訴ORACLE這是一個(gè)外部識別賬號。

  GLOBAL用戶賬號

  GLOBAL類型的用戶賬號數(shù)據(jù)庫不檢測口令,而是由X.509目錄服務(wù)器檢測口令。創(chuàng)建一個(gè)GLOBAL類型的用戶賬號的方法是:


  關(guān)鍵字IDENTIFIED GLOBALLY AS表示建立的是一個(gè)GLOBAL類型的用戶賬號.

  創(chuàng)建和更改用戶賬號

  CREATE USER 用于建立用戶賬號和給用戶賬號的屬性賦值。ALTER USER用于更改用戶賬號和屬性。但CREATE USER語句必須包括用戶名和口令。

  有部分屬性能用CREATER USER和ALTER USER語句設(shè)置,下面對是這些的屬性具體描述:

  給用戶分配缺省表空間

  表空間(tablespace)是放置表、索引、叢等用戶對象的。如果在create user語句中沒有包含表空間,那么缺省的是系統(tǒng)表空間。


  給用戶分配臨時(shí)表空間

  臨時(shí)表空間,顧名思義是臨時(shí)存放表、索引等用戶對象的臨時(shí)段。建立方法一樣


  給用戶分配表空間的使用定額

  使用定額限制用戶在表空間中使用磁盤的數(shù)量。定額可以按字節(jié)、千字節(jié)、兆字節(jié)或者無限制來制定。


  給用戶分配一個(gè)簡表

  簡表可以限制用戶在會(huì)話時(shí)消耗的資源。這些資源包括:連接數(shù)據(jù)庫的時(shí)間,空閑時(shí)間,每次會(huì)話的邏輯讀數(shù)據(jù)的數(shù)量等等,缺省的簡表對資源無限制。


  為用戶響應(yīng)指定角色

  這個(gè)屬性只能由ALTER USER語句設(shè)置,試圖用CREATE USER語句設(shè)置將回返回一個(gè)例外。


  為用戶的password設(shè)定到期時(shí)間以便在用戶下次登錄時(shí)更改

  當(dāng)用戶的password到期,在下一次登錄時(shí)將強(qiáng)迫修改password,oracle提示用戶輸入舊的password,然后輸入新的password。這項(xiàng)功能常用于新用戶,當(dāng)新用戶用缺省的password登錄時(shí)必須修改立即修改password.


  鎖定賬號,是用戶不能登錄


  對賬號解鎖,以便用戶能登錄數(shù)據(jù)庫


  權(quán)限和角色

  權(quán)限允許用戶訪問屬于其它用戶的對象或執(zhí)行程序,ORACLE系統(tǒng)提供三種權(quán)限:

   Object 對象級

   System 系統(tǒng)級

   Role 角色級

  這些權(quán)限可以授予給用戶、特殊用戶public或角色,如果授予一個(gè)權(quán)限給特殊用戶"Public"(用戶public是oracle預(yù)定義的,每個(gè)用戶享有這個(gè)用戶享有的權(quán)限),那么就意味作將該權(quán)限授予了該數(shù)據(jù)庫的所有用戶。

  對管理權(quán)限而言,角色是一個(gè)工具,權(quán)限能夠被授予給一個(gè)角色,角色也能被授予給另一個(gè)角色或用戶。用戶可以通過角色繼承權(quán)限,除了管理權(quán)限外角色服務(wù)沒有其它目的。權(quán)限可以被授予,也可以用同樣的方式撤銷。

  建立和使用角色

  如前所訴,角色存在的目的就是為了使權(quán)限的管理變得輕松。建立角色使用CREATE ROLE語句,他的語法如下:


  缺省情況下建立的角色沒有password或者其他的識別。如果使用IDENTIFIED BY 子句建立,那么角色不會(huì)自動(dòng)響應(yīng),必須用SET ROLE激活。


  EXTERNALLY和GLOBALLY類型的角色由操作系統(tǒng)和ORACLE Service server驗(yàn)證。通常用戶需要權(quán)限修改應(yīng)用程序中使用的表單中的數(shù)據(jù),但是只有在應(yīng)用程序運(yùn)行時(shí)而不是在使用ad hoc工具時(shí),這種上下文敏感安全可以通過有PASSWORD的角色來實(shí)現(xiàn)。當(dāng)用戶在應(yīng)用程序內(nèi)部連結(jié)數(shù)據(jù)庫時(shí),代碼將執(zhí)行SET ROLE命令,通過安全驗(yàn)證。所以用戶不需要知道角色的password,也不需要自己輸入SET ROLE命令。

  對象權(quán)限

  對象權(quán)限就是指在表、視圖、序列、過程、函數(shù)或包等對象上執(zhí)行特殊動(dòng)作的權(quán)利。有九種不同類型的權(quán)限可以授予給用戶或角色。如下表:


  對象由不止一個(gè)權(quán)限,特殊權(quán)限ALL可以被授予或撤銷。如TABLE的ALL權(quán)限就包括:

   SELECT,INSERT,UPDATE和DELETE,還有INDEX,ALTER,和REFERENCE。

  如何看這個(gè)表我們以ALTER權(quán)限為例進(jìn)行說明

  ALTER權(quán)限

  允許執(zhí)行ALTER TABLE和LOCK TABLE操作,ALTER TABLE可以進(jìn)行如下操作:

    . 更改表名

    . 增加或刪除列

    . 改變列的數(shù)據(jù)類型或大小

    . 將表轉(zhuǎn)變?yōu)榉謪^(qū)表

  在SEQUENCE上的ALTER權(quán)限允許執(zhí)行ALTER Sequence語句,重新給sequence分配最小值、增量和緩沖區(qū)大小。

  系統(tǒng)權(quán)限

  系統(tǒng)權(quán)限需要授予者有進(jìn)行系統(tǒng)級活動(dòng)的能力,如連接數(shù)據(jù)庫,更改用戶會(huì)話、建立表或建立用戶等等。你可以在數(shù)據(jù)字典視圖SYSTEM_PRIVILEGE_MAP上獲得完整的系統(tǒng)權(quán)限。對象權(quán)限和系統(tǒng)權(quán)限都通過GRANT語句授予用戶或角色。需要注意的是在授予對象權(quán)限時(shí)語句應(yīng)該是WITH GRANT OPTION子句,但在授予系統(tǒng)權(quán)象時(shí)語句是WITH ADMIN OPTION,所以在你試圖授予系統(tǒng)權(quán)限時(shí),使用語句WITH GRANT OPTION系統(tǒng)會(huì)報(bào)告一個(gè)錯(cuò)誤:ONLY ADMIN OPTION can be specified。在考試中要特別注意這個(gè)語法和錯(cuò)誤信息。

  角色和角色權(quán)限

  角色權(quán)限就是將屬于用戶的權(quán)限授予一個(gè)角色。任何權(quán)限都可以授予給一個(gè)角色。授予系統(tǒng)權(quán)限給被授予者必須使用WITH_ADMIN_OPTION子句,在會(huì)話期間

上一頁  [1] [2] [3] 下一頁

正在看的ORACLE教程是:Oracle數(shù)據(jù)操作和控制語言詳解。通過SET ROLE語句授予或撤銷角色權(quán)限。然而,角色權(quán)限不能依靠存儲(chǔ)在SQL中的權(quán)限。如果函數(shù)、程序、包、觸發(fā)器或者方法使用另一個(gè)計(jì)劃擁有的對象,那么就必須直接給對象的擁有者授權(quán),這是因?yàn)闄?quán)限不會(huì)在會(huì)話之間改變。

  授予和撤銷權(quán)限

   給用戶或者角色授予權(quán)限使用GRANT 語句,GRANT語句的語法如下:


  對象權(quán)限被授予 WITH GRANT OPTION,

  權(quán)限和數(shù)據(jù)字典

  數(shù)據(jù)字典是ORACLE存儲(chǔ)有關(guān)數(shù)據(jù)庫結(jié)構(gòu)信息的地方,數(shù)據(jù)本身存放在其他地方,數(shù)據(jù)字典由表和視圖組成。在考試中關(guān)于數(shù)據(jù)字典最容易考的內(nèi)容是:查看那一類權(quán)限已經(jīng)被授予。比如DBA_TAB_PRIV包含了用戶授予給另一用戶的對象權(quán)限和在授予時(shí)是否帶有WITH GRANT OTPION子串的信息。注意DBA_TAB_PRIV不僅僅包含了對表的權(quán)限的關(guān)系,他還包括函數(shù)、包、隊(duì)列等等上的權(quán)限的關(guān)系。下表列出了所有的權(quán)限和角色的數(shù)據(jù)字典視圖:

  表: 權(quán)限的數(shù)據(jù)字典視圖

上一頁     

上一頁  [1] [2] [3] 

標(biāo)簽:股票投資 襄陽 嘉峪關(guān) 南平 南平 池州 通化 聊城

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Oracle數(shù)據(jù)操作和控制語言詳解》,本文關(guān)鍵詞  Oracle,數(shù)據(jù),操作,和,控制,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Oracle數(shù)據(jù)操作和控制語言詳解》相關(guān)的同類信息!
  • 本頁收集關(guān)于Oracle數(shù)據(jù)操作和控制語言詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 石城县| 新竹县| 阿巴嘎旗| 阿坝县| 韩城市| 永安市| 怀化市| 海口市| 濉溪县| 兰州市| 巴南区| 英山县| 定西市| 日土县| 天等县| 云阳县| 太和县| 贵港市| 营山县| 包头市| 大港区| 广南县| 鲜城| 泗阳县| 岢岚县| 满城县| 那坡县| 南澳县| 桑植县| 绵阳市| 汉寿县| 大渡口区| 巴塘县| 营口市| 都匀市| 尼勒克县| 芦山县| 秦皇岛市| 同心县| 南乐县| 平和县|