oracle基礎

 

數據庫的定義、做用介紹:

 什麼是數據庫?算法

按照數據結構來組織、存儲和管理數據的創建在計算機存儲設備上的倉庫。sql

 數據庫的發展史:數據庫

起始於1962年,1968年在IBM出現windows

數據庫在測試過程當中的做用:

需求分析階段:瞭解測試環境數據庫、表、數據等信息、需求緩存

用例設計階段:測試數據準備安全

用例執行階段:測試數據構造、測試結果數據檢查、代碼邏輯查看服務器

自動化測試:測試腳本、數據、工具網絡

性能壓力測試:數據準備、性能數據分析數據結構

測試環境搭建:維護數據庫、執行配置腳本、備份恢復數據庫等oracle

 

數據庫的分類:

層次式數據庫

網絡式數據庫

關係式數據庫(經常使用)

 

關係型數據庫:

經常使用:

Oracle:Oracle(甲骨文)公司,多平臺,性能最高,得到最高安全認證,適用大型

DB2:IBM公司,多平臺,性能較高,得到最高安全認證,企業級應用最廣

SQL Server:微軟、windows平臺,中小型網站和電子商務辦公系統

MySQL:瑞典my sql AB公司,多平臺,開源,中小型網站開發

Access:微軟、windows平臺,小型系統使用

MariaDB:MySQL的一個分支,徹底兼容MySQL,包括API和命令行,使之可以成爲MySQL的代替品

 

不經常使用:

Informix,Sybase,PostgreSQL

 

非關係型數據庫:

經常使用:

Redis:開源的使用ANSI C語言編寫、支持網絡、可基於內存亦可持久化的日誌型數、Key-Value數據庫,並提供多種語言的PI

MongoDB:基於分佈式文件存儲的數據庫。有C++語言編寫,旨在爲WEB應用服務器擴展的高性能數據存儲解決方案。支持的查詢語言很是強大,單表查詢的絕大部分性能,並且還支持對數據創建索引。

Memcached:是一個高性能的分佈式內存對象緩存系統,用於動態Web應用數據庫負載。它經過在內存中緩存數據和對象來減小讀取數據庫的次數,從而提升數據庫驅動網站的速度。

Cassandra:一個開源的、分佈式、無中心、支持水平擴展、高可用的KEY-Value的NOSQL數據庫。

 

不經常使用:

HBase、MemacheDB、BerkeleyDB、Tokyo Cabinnet

 

 

Oracle介紹:

 

公司簡介:全稱甲骨文股份有限公司(甲骨文軟件系統有限公司),是全球最大的企業級軟件公司(被成爲「純軟件公司的先驅」。在我的計算機領域,靠賣軟件賺錢的公司),總部位於美國加利福尼亞州的紅木灘,其創始人是拉里誒裏森。

 

市場份額:Oracle(54%)、IBM-DB2(21%)、MicrosoftMSQL(14%)

相關認證:OCM認證【大師】、OCP認證【專家】、OCA認證【專員】等

版本:免費版、標準版、標準版二、企業版

 

Oracle Server主要文件目錄介紹:

admin:主要存放數據庫運行過程當中產生的跟蹤文件(後臺進程,用戶sql語句)

bin:包含數據庫管理各類命令

ADMIN重要:裏面有監聽文件(listence.ora tnsnames.ora sqlnet.ora)

Db_1:服務器數據庫文件夾,表明Oracle目錄樹的根, 它包含與Oracle軟件運行有關的子目錄和網絡文件以及選定的組件等

Oradata:數據庫物理文件存儲在oradata/db_name目錄下,該目錄主要存儲數據庫的控制文件、數據文件、重作日誌文件。其中*.dbf文件對應數據庫中每一個表空間;.ctl文件爲控制文件;.log文件對應重作日誌文件組及其成員

Flash_recovery_area:目錄存儲並管理與備份和恢復有關的文件。它包含系統中每一個數據庫的子目錄。該目錄可用於存儲與恢復有關的文件,如控制文件、聯機重作日誌副本、歸檔日誌、閃回日誌以及Oracle數據庫恢復管理器(RMAN)備份等。

 

adump:通常是audit dump

bdump:中有alert文件,和一些後臺進程的trace file,bdump文件下放着的是數據庫的預警文件,若是數據庫出問題,該文件是DBA要查看的首選文件

cdump:通常放置一些核心的trace文件

udump:放着的是用戶進程跟蹤文件,用於收集客戶應用的SQL語句的統計信息。

pfile:文件下放着的天然是數據庫的初始化參數文件。

:若是以爲oracle卡了 ,能夠把bdump和udump文件夾下文件刪除

 

 

Oracle Client主要文件目錄介紹:

 

ORACLE_HOME主要包括的子目錄有:

BIN--主要包含用於數據庫管理的各類命令等

cdd--與Oracle Cluster Synchronization服務有關的文件

dbs--存放數據庫實例模式的腳本等

demo--存放數據庫實例模式的腳本等

install--用於存儲ORACLE安裝後的端口號,iSQL*PLUS以及Enterprise Manager

Database Control啓動並登陸的方式等

NETWORD\ADMIN--有關監聽器listener.ora和sqlnet.ora以及tnsnames.ora等

config--用於與Oracle Enterprise Menagement有關的端口管理等

database--初始化參數與口令文件

 

Oracle兩種用戶認證方式:

Sqlnet.authentication_services=(NTS)|(NONE)

NTS:操做系統認證方式,不使用口令文件;

NONE:口令文件認證方式

 

 

 

訪問Oracle數據庫四種方法:sql*plus工具、dos窗口sqlplus、isql、plsql

 

Cmd>regedit  進入註冊表編輯器快捷命令,紅框顯示oracle註冊信息

 

 

Oracle版本號的含義

 

Oracle產品版本號由5部分數字組成

一、主發佈版本號:是版本的最重要的標識號,表示重大的改進和新的特徵

二、主發佈維護號:維護版本號,一些新的特性的增長和改進

三、應用服務器版本號:Oracle應用服務器的版本號

四、構件特定版本號:針對構件升級的版本號

五、平臺特定版本號:標識操做系統平臺相關的發佈版本

 

1)Oracle主要版本

Oracle

Oracle 8/Oracle 8i(1CD):「i」表示internet,表示Oracle開始進軍網絡

Oracle 9i(3CD):屬於Oracle 8i的穩定版本,如今依然大範圍使用(使用率很是高,由於正好是中國進行電子化信息改革的開始)

Oracle 10g(630M):「g」表示網格Grid技術,使用了網絡計算的方式,提高了數據庫的分佈式的訪問性能

Oracle 11g(1.7G):屬於Oracle 10g的穩定版本,如今新項目使用較多


  

 

plsql語句(Structured Query Language:結構化查詢語言)

 

1、sql編寫規範

 

明確規範

  • sql語句的全部表名、字段名所有小寫,系統保留字、內置函數名、sql保留字大寫。
  • 鏈接符or、in、and、以及=、<=、>= 等先後加上一個空格。
  • 對較爲複雜的sql語句、過程、函數加上註釋,說明算法、功能。
  • SQL 語句的縮進風格

 

1. 一行有多列,超過80個字符時,基於列對齊原則,採用下行縮進

2. where子句書寫時,每一個條件佔一行,語句另起一行時,以保留字或者鏈接符開始,鏈接符右對齊。

多表鏈接時,使用表的別名來引用列。

 

其餘注意事項

 

SQL 命令是大小寫不敏感

  • SQL 命令可寫成一行或多行
  • 一個關鍵字不能跨多行或縮寫
  • 子句一般位於獨立行,以便編輯,並易讀

 

2、SQL語言基礎

 

SQL語言分類

 

 

SQL語句規則

 

  • SQL 語句是大小寫不敏感
  • SQL 語句可寫成一行或多行
  • 一個關鍵字不能跨多行或縮寫
  • 子句一般位於獨立行,以便編輯,並易讀
  • 空格和縮進使程序易讀
  • 關鍵字大寫,其餘小寫

 

算數表達式:

 

 對NUMBER和DATE型數據可用算數運算建立表達式

 

例如:select sal+800 from emp;

          select sal-200 from emp;

          select sal*5 from emp;

          select sal/3 from emp;

 

運算優先級:

 

乘法和除法的優先級高於加法和減法

同級運算的順序是從左到右

表達式中使用括號可強行改變優先級的運算順序

 

定義空值

 

空值指不可用,不知道,不實用的值

空值不等於零或空格

包括空值的算數表達式等於空

 

定義列的別名

 

改變列的標題頭

使用計算結果

列的別名

若是使用特殊字符,或大小寫敏感,或有空格時,需加雙引號

 

例如 select ename as name from emp;或select ename name fromemp;

 

連結操做

 

將列或字符與其它列連結

用雙「||」表示

產生的結果列是一個字符表達式

 

例如:

SELECT ename||job AS "Employees" FROM  emp;

 

文字字符串

 

文字字符串是一個包括在SELECT列表中的字符,表達式,或數字

日期和字符型文字字符必須用單引號括起來

每返回一條記錄字符被輸出一次

 

例:SELECT ename ||' '||'is a'||' '||job AS "Employee Details" FROM emp;

 

 

 

 

構造命令

 

SELECT 'delete from '||table_name||' where 1=0;'||chr(10)

FROM user_all_tables;

 

顯示:

delete from CUSTOMERS where 1=0;

delete from PRODUCT_TYPES where 1=0;

delete from PRODUCTS where 1=0;

delete from PURCHASES where 1=0;

delete from EMPLOYEES where 1=0;

……………

……………

 

 

重記錄:

 

缺省狀況下查詢顯示全部行,包括重行

 

例:SELECT deptno FROM emp;

顯示有重複信息

 

 

 

不想要重複 用distinct(去重),具體爲select distinct deptno from emp;

可是distinct操做會引發排序,經過排序去掉重複記錄。

 

描述表結構

 

打開command windows , 輸入"desc 表名",顯示錶結構(不能在sql windows中使用)

 

 

3、限定和排序數據

  • 限制某一查詢所取記錄

  • 排序查詢結果

 

限定所選的條件

使用where限定查詢條件

 

select  [distinct]* from emp where deptno = 20 and mgr = 7788

注:from子句在where子句以後

 

字符串和日期

  • 字符串和日期要用單引號擴起來

  • 字符串是大小寫敏感的,日期值是格式敏感的

  • 缺省的日期格式是 'DD-MON-YY'

 

 

 

 

比較運算符

 

 

 

 

 

使用比較運算符

 

 

 

 

 

注:空值是直接不參與計算

 

其它的比較運算符

 

注:

between默認從小到達,不能輸例如「between 1000 and 800」

 

使用BETWEEN運算符顯示某一 值域範圍的記錄

 

 

注:

between默認從小到達,不能輸例如「between 1000 and 800」

 

in的使用

 

使用IN運算符得到匹配列表值的記錄

 

in 示例:

 

 

 

LIKE使用

 

使用LIKE運算符執行通配查詢

查詢條件可包含文字字符或數字

(%) 可表示零或多個字符

( _ ) 可表示一個字符

 

like 示例:

 

 

 

 

使用組合方式匹配字符

 

 

使用ESCAPE 標識符來查找帶特殊符號的字符號

 

 

 

is null 使用

查詢包含空值的記錄

 

 

運算邏輯符

 

 

使用AND

 

AND須要條件都爲TRUE

 

 

 

OR 運算符

OR須要條件之一是TRUE

 

 

 

使用not in 運算符

 

 

優先級規則

 

括號將跨越全部優先級規則

 

 

 

 

ORDER BY 子句

 

使用ORDER BY 子句將記錄排序

  • ASC: 升序,缺省

  • DESC: 降序

ORDER BY 子句在SELECT語句的最後

 

降序排列:

 

 

使用列的別名排序

 

 

使用中文字符的別名排序

 

 

注:

  1. 按中文拼音進行排序:SCHINESE_PINYIN_M

  2. 按中文部首進行排序:SCHINESE_RADICAL_M

  3. 按中文筆畫進行排序:SCHINESE_STROKE_M

 

經過ORDER BY 列表的順序來排序

 

 

 

 

4、單組函數

 

  • 描述可在SQL 中使用的各類函數

  • 在SELECT語句中使用字符,數字,日期函數

  • 描述轉換函數的使用

 

函數過程

 

 

 

 

兩種SQL函數

 

 

 

單行函數

  • 操做數據項

  • 接受參數並返回一個值

  • 對每一返回行起做用

  • 每一行返回一個結果

  • 可修改數據類型

  • 可以使用嵌套

 

字符函數

 

 

 

字符函數說明

 

 

使用大小寫轉換

顯示員工號,名字,部門號

 

 

使用字符處理函數

 

 

 

instr  找到字符位置 這裏是找ename中A的位置

concat 鏈接兩個字段

substr substr(字段名,a,b)  以「字段名」爲基礎,從第a個字符開始截取b個字符串

 

 

數字函數

 

 

floor  向下取整

mod   取餘數

round  默認個位取整,加條件確認取整位數(4舍五入)

trunc    去尾取整

 

示例:

SELECT FLOOR(5.8),FLOOR(-5.8) FROM dual;

SELECT MOD(8,3), MOD(8,4) FROM dual;

SELECT ROUND(5.73), ROUND(5.73),ROUND(5.73,-1) FROM dual;

SELECT TRUNC(5.73),TRUNC(5.73,1),TRUNC(5.73,-1) FROM dual;

 

日期

 

Oracle之內部數字格式存儲日期:世紀,年,月,日,小時,分鐘,秒

缺省的日期格式是 DD-MON-YY

SYSDATE 是返回日期和時間的函數

DUAL是用來查看SYSDATE的虛表

 

日期的運算

 

 

日期函數

 

 

SELECT ADD_MONTHS('08-AUG-2007',13) FROM dual ;

SELECT LAST_DAY('08-AUG-2007') FROM dual;

SELECT NEXT_DAY('08-AUG-2007','SATURDAY') FROM dual;

SELECT SYSDATE FROM dual;

默認的日期格式是在數據庫參數NLS_DATE_FORMAT中指定的,DBA能夠修改

NLS_DATE_FORMAT的設置,方法是在數據庫的init.ora或者spfile.ora文件中修改,固然更方便的方法是使用ALTER SESSION命令在SQL *Plus中修改,例如:ALTER SESSION SET

NLS_DATE_FORMAT='MONTH-DD-YYYY';

 

 

轉換函數

 

 

隱含的數據轉換類型

 

  • 做爲賦值,Oracle可自動轉換

 

 

  •  表達式可自動轉換數據類型

 

 

清楚的數據類型轉換

 

 

 

TO_CHAR 函數操做日期

 

 

格式規則

 

  • 必須用單引號括起來,而且是大小寫敏感

  • 可包含任何有效的日期格式

  • 有一個fm元素 用於填補空格或禁止前面的零

  • 使用逗號分離日期值

 

日期格式基礎

 

 

TO_CHAR函數處理日期

 

 

 

TO_CHAR函數處理數字

 

 

使用TO_CHAR函數將數字做爲字符顯示

 

 

 

TO_NUMBER和TO_DATE函數

 

使用TO_NUMBER函數將字符轉換爲數字

 

 

使用TO_DATE函數將字符轉換爲日期

 

 

進制轉換

 

  • 十進制與十六進制

SQL > select to_char(2463,'xxxx') from dual;

TO_CH

-----

99f

已選擇 1 行。

  • 十六進制與十進制

SQL> select to_number(99f,'xxxx') from dual;

TO_NUMBER('99F','XXXX')

-----------------------

2463

已選擇 1 行。

 

 

 

NVL函數

 

  • 將空值轉換爲實際的值

     數據格式能夠是日期,字符,數字

     數據類型必須匹配

     NVL(comm,0)

     NVL(hiredate,'01-JAN-97')

     NVL(job,'No Job Yet')

 

NVL函數2

 

NVL2(expr1,expr2,expr3)

若是expr1不爲Null,返回expr2,若是expr1爲Null,返回expr3。

expr1能夠爲任何數據類型

 

示例:

NVL2(comm,0,1)

 

 

decode函數

 

DECODE函數相似於一系列CASE 或 IF-THEN-ELSE 語句

 

 

 

 

嵌套函數

 

  • 單行函數可被嵌入到任何層(函數中套函數)

  • 嵌套函數從最深層到最低層求值

 

示例:

SELECT ename,

NVL(TO_CHAR(mgr),'No Manager')

FROM emp

WHERE mgr IS NULL;

 

 

 

SQL指令和sql*plus命令的區別

 

 

iSQL*Plus概述

 

➢ 登錄到 iSQL*Plus

➢ 描述表的結構

➢ 編輯SQL語句

➢ 從iSQL*Plus執行SQL

➢ 將SQL語句保存或追加到文件中

➢ 執行存儲的文件

➢ 從文件將SQL語句調到緩衝區編輯

 

SQL*Plus 的編輯命令

 

➢ I[NPUT] 輸入SQL語句

➢ I[NPUT] text

➢ L[IST] 顯示SQL語句

➢ L[IST] n

➢ L[IST] m n

➢ R[UN] 執行SQL語句

➢ n

➢ n text

➢ 0 text

➢ A[PPEND] text 追加SQL語句

➢ C[HANGE] / old / new 修改SQL語句

➢ C[HANGE] / text /

➢ CL[EAR] BUFF[ER] 清空緩衝區

➢ DEL 刪除SQL語句

➢ DEL n

➢ DEL m n

➢ SAVE filename 保存到文件

➢ GET filename 從文件讀取到緩衝區

➢ START filename 執行文件

➢ @ filename

➢ EDIT filename編輯文件

➢ SPOOL filename 導出執行結果到文件

➢ EXIT

 

 

 

5、從多個表顯示數據

  • 使用相等和不等連結寫SELECT語句來訪問多個表

  • 使用外鏈接查詢數據

  • 表的自鏈接

 

使用鏈接從多個表中查詢數據

 

 

在WHERE子句中寫鏈接條件 

在多個表中具備相同的列名

 

笛卡爾現象

 

➢ 笛卡爾結果造成於:

鏈接條件被省略

鏈接條件無效

第一個表的全部記錄鏈接到第二個表的全部記錄

➢ 爲了不笛卡爾結果咱們老是在 WHERE 子句中使用有效鏈接

 

 

 

鏈接的類型

 

 

 

 

等值鏈接示例

 

 

限定列名

 

➢ 使用表名做爲前綴在多個表中指定列名 

➢ 使用表前綴能夠改進性能

➢ 使用列的別名以區分不一樣表的同名列

 

使用AND運算符附加查詢條件

 

and用法 附加條件 篩選出 deptno=10的信息

 

使用別名簡化查詢

 

 

 

多表鏈接

 

 

非等值鏈接

 

 

 

 

   

 

                 

     SAL在LOSAL和HISAL之間

 

示例:

 

 

 

 

自鏈接

 

 

empno爲7499的人的領導編號爲7698,此爲同一張表內的聯繫

 

示例:

 

SELECT worker.ename, worker.mgr ,' works for ',

manager.empno ,manager.ename

FROM emp worker, emp manager

WHERE worker.mgr = manager.empno;

 

外鏈接

 

➢ 使用外鏈接看到不知足鏈接條件的記錄
➢ 外鏈接運算符是加號(+)

➢ 外鏈接分爲左鏈接、右鏈接

 

此爲右鏈接,左鏈接條件爲e.deptno = d.deptno (+)

顯示出了沒有員工的編號40部門

 

注:(+)在=左邊是右鏈接,表示把右邊的表的數據所有顯示出來

         (+)在=右邊是左鏈接,表示把左邊的表的數據所有顯示出來

 

此外 左右鏈接還有一種寫法

 

OUTER JOIN句法

 

ISO99標準把複雜的加號從Oracle outer join中拿出去,並使得outer join SQL更容易理解。

 

LEFT OUTER JOIN

RIGHT OUTER JOIN

 

示例:

select ename , dept.deptno

from emp left outer join dept

on emp.deptno = dept.deptno

 

 

 

left outer join 左鏈接 

展現左表中的全部記錄

on表示知足什麼條件 等同於where 只在左右鏈接時使用

 

6、組函數

• 熟悉組函數的用法

• 使用GROUP BY子句將數據分組

• 使用HAVING子句包括或排除被分組的記錄 

 

什麼是分組函數?

 

分組函數運算每一組記錄,每一組返回一個結果

 

分組函數的類型?

 

➢ AVG ([DISTINCT|ALL]n) 求平均數

➢ SUM ([DISTINCT|ALL]n) 求和

➢ COUNT ({ *|[DISTINCT|ALL]expr}) 計數

➢ MAX ([DISTINCT|ALL]expr) 求最大值

➢ MIN ([DISTINCT|ALL]expr) 最小值

➢ STDDEV ([DISTINCT|ALL]x) 標準差

➢ VARIANCE ([DISTINCT|ALL]x) 方差

 

使用AVG 和 SUM 函數

 

➢ 在數字類型數據使用AVG 和 SUM 函數

 

 

 

 

 

使用MIN 和 MAX 函數

 

➢ MIN 和 MAX函數適用於任何數據類型

 

 

 

使用 COUNT 函數

 

➢ COUNT(*)返回表中的記錄數

 

 

➢ COUNT(expr) 返回非空記錄

 

 

分組函數和空值

 

➢ 分組函省略列中的空值

 

 

 

在分組函數中使用NVL函數

 

➢ NVL函數強制分組函數包括空值

 

 

GROUP BY子句

 

➢ 使用GROUP BY子句將表分紅小組

➢ 組函數忽略空值, 可使用NVL,NVL2,COALESCE 等函數處理空值

注:group by 寫在order by 以前

 

colaesce(字段,值,字段2,值),返回第一個不爲空的字段並顯示出這個字段,當第一個字段沒有非空時,順延查詢第二個字段知道結束

 

 

全部用來分組的列在SELECT列表中不能使用分組函數

 

 

 

多列分組

 

在多列上使用 GROUP BY子句

 

 

使用分組函數時的非法查詢

➢ 不能使用WHERE子句限定組

➢ 可以使用HAVING子句限定組

 

 

 

HAVING子句

➢ Having子句的做用是對行分組進行過濾

  • 記錄被分組

  • 使用組函數

  • 匹配HAVING子句的組被顯示

 

 

 

having用在group by以後 是對group by 的補充

 

嵌套組函數

 

➢ 顯示最高的平均工資

 

 

嵌套組函數必須有group by

 

7、子查詢

• 定義子查詢

• 列出子查詢的種類

• 編寫單行和多行子查詢

 

➢ 子查詢在主查詢前執行一次

➢ 主查詢使用子查詢的結果

 

 

使用子查詢的規則

➢ 子查詢要用括號括起來

➢ 將子查詢放在比較運算符的右邊

➢ 子查詢中不要加ORDER BY子句

➢ 對單行子查詢使用單行運算符

➢ 對多行子查詢使用多行運算符

 

子查詢的種類

 

 

 

 

 

單行子查詢

➢ 返回一行記錄

➢ 使用單行記錄比較運算符

 

 

示例:

 

 

 

在子查詢中使用分組函數

 

 

 

 

在子查詢中使用HAVING子句

➢ 先執行子查詢

➢ 而後返回結果到主查詢的HAVING 子句

 

 

多行子查詢

➢ 返回多行

➢ 使用多行比較運算符

 

 

在多行子查詢中使用ANY運算符

 

 


在多行子查詢中使用ALL運算符

 

 

 

8、操做數據

 

描述DML語句

 

使用INSERT,UPDATE和DELETE命令操做數據

控制事務

➢ 使用 DML 語句可執行:

插入新數據

修改已有數據

刪除數據

➢ 一個事務是DML語句的邏輯工做單元

 

INSERT 語句

 

INSERT語句一次將一個記錄的數據輸入表中

 

插入空值(不指定null)

 

插入空值(指定null)

 

 

 

注:

1.在字段屬性能夠爲空時,插入的值能夠爲空

2.insert 操做執行以後不會自動顯示,要自主查詢

 

 

INSERT語句中使用函數

➢ 例如使用SYSDATE函數插入當前的日期和時間

 

 

 

➢ 增長一個員工

 

 

 

從其餘表中拷貝記錄

 

 

 

UPDATE 語句

 

➢ 使用UPDATE語句修改已存在的記錄(update不能修改主鍵)

 

修改記錄

 

➢ 使用WHERE子句修改指定的記錄.

 

 

➢ 修改全部的記錄.

 

 

使用多列子查詢修改數據

 

 

注:update 不能修改做爲主鍵的字段爲不存在的值

 

DELETE 語句

 

➢ 使用DELETE命令從表中刪除記錄.

 

 

➢ 刪除全部的記錄

 

 

 

刪除的記錄基於其餘表的記錄

 

➢ 使用子查詢,刪除的記錄基於其餘的表。

 

 

刪除記錄時違反完整性約束

 

 

dept表的deptno與emp表相關聯(外鍵約束),刪除違反完整性約束

 

數據庫的事務

 

➢ 一組DML語句,修改的數據在他們中保持一致 

➢ 一個 DDL 語句

➢ 一個 DCL 語句

 

數據庫的事務

 

➢ 開始於第一個執行的語句

➢ 結束於:

COMMIT 或 ROLLBACK

DDL or DCL (grant/revoke) 語句

某些錯誤,退出,或系統崩潰

 

事務的自動處理

 

➢ 當下列狀況發生時事務自動提交:

執行一個 DDL 語句

執行一個 DCL 語句

從 SQL*Plus正常退出

➢ 當從SQL*PLUS中強行退出或系統失敗時,事物自動回滾

 

COMMIT和 ROLLBACK的優勢

 

➢ 保證數據一致性

➢ 在數據永久性生效前從新查看修改的數據

➢ 相關邏輯操做單元

 

控制事務

 

 

 

 

提交或回滾前數據的狀態

 

➢ 之前的數據可恢復.

➢ 當前的用戶可看到DML操做的結果.

➢ 其餘用戶不能看到DML操做的結果.

➢ 被操做的數據被鎖住,其餘用戶不能修改這些數據.

 

提交後數據的狀態

 

➢ 數據的修改被永久寫在數據庫中.

➢ 數據之前的狀態永久性丟失.

➢ 全部的用戶都能看到操做後的結果.

➢ 記錄鎖被釋放,其餘用戶可操做這些記錄.

➢ 全部的 savepoints 被去掉.

 

注: 

savepoint應用

 

 

 回到a2以後還能夠再回到a1 , 回到a1後,不能回到a2,由於a2在此時並無被記錄

 

回滾後數據的狀態

 

➢ 語句將使全部的修改失效.

      修改的數據被回退.

      恢復數據之前的狀態.

      行級鎖被釋放.

 

回退到某一標識

 

➢ 使用語句產生一個標識,將事務分紅幾個階段.

➢ 可回退到標識指定的階段.

 

語句回滾

 

➢ 若是一條 DML 語句執行時失敗,只有此語句回退.

Oracle 執行了一個自動的 savepoint.

其餘的變化被保留.

➢ 客戶應該執行COMMIT或ROLLBACK以結束事務.

 

事務特性

• 事務的ACID特性

• 一、原子性(atomicity):

一個事務中包含的全部sql語句都是一個不可分割的單元。

• 二、一致性(consistency)

事務必須確保數據庫的狀態是一致的。

• 三、隔離性(isolation)

多個事務獨立運行,彼此不影響。

• 四、持久性(durability)

事務一旦提交,數據庫的變化就會被永久保留下來。

 

讀一致性

➢ 讀一致性保證了查詢數據獲得一致的結果.

➢ 不一樣用戶修改的數據不會發生衝突.

➢ 對相同的數據操做時確保:

查詢時不用等寫完成

寫時不用等查詢完成

 

小結

 

 

9、管理表

 

• 瞭解數據庫的對象

• 建立表、改變表的定義,表中列可使用的數據類型

• 刪除表、改表名、截取表的全部記錄

 

 

表命名規則

 

➢ 必須以字母開頭

➢ 可包括數字

➢ 只能包含A-Z, a-z, 0-9, _, $, and #

➢ 不要使用oracle的保留字

➢ 同一用戶的對象不能同名

 

建立表

你必須有 :

➢ 建表的權限

    CREATE TABLE [schema.]table

    (column datatype [DEFAULT expr];

➢ 有存儲區域

➢ 你可指定:

表名 Table name

列名, 列的數據類型, 列的大

 

建表過程:

1.建表

 

2.添加信息

 

 

當沒有輸入值時,sex會採用默認的值‘male’

也能夠經過本身輸入值來輸入

 

注:以現有的圖表來建立表時 能夠經過別名來更新字段名稱

 

 

 

 

引用其餘用戶的表

 

➢ 其餘用戶的表不能直接訪問

➢ 使用其餘用戶的表時需加用戶名做爲前綴

示例:

 SELECT * FROM scott.emp;

 

缺省選項

 

➢ 在插入記錄時爲列指定缺省值

 

 

合法的值是字符,表達式.或SQL函數

非法值爲其餘的列名.

缺省的數據類型必須匹配列的數據類型.

 

查詢數據字典

 

➢ 查詢此用戶所擁有哪些表

 

 

➢ 查詢此用戶擁有哪些類型的對象

 

 

➢ 查詢此用戶擁有的表,視圖,同義詞,序列號

 

 

 

數據類型

 

 

 

使用子查詢建立表

 

➢ 使用子查詢建立表

列的數目要和子查詢中的匹配

可定義列名和缺省值

 

使用CTAS建立表

 

 

 

ALTER TABLE 語句

 

➢ 使用ALTER TABLE 語句可: 

加一列 : alter table add

修改列 : alter table modify

對新列定義缺省值

 

增長列

➢ 使用 ADD 子句增長列.

 

 

 

修改列

 

➢ 可修改列的數據類型,大小和缺省值.

 

 

➢ 修改後的缺省值隻影響之後插入的數據.

 

 

 

修改列名

 

➢ 在Oracle9i及後續版本,能夠直接修改列名.

 

 

 

手動修改表

 

輸入命令,點擊鎖便可手動修改

 

 

刪除表

 

➢ 表中全部數據將被刪除

➢ 事務被提交

➢ 全部索引被刪除

➢ 不能回退

 

 

 

改變對象名稱

 

➢ 使用RENAME語句改變對象名稱

 

 

注:操做者必須是對象的全部者

 

 

截取表的全部記錄

 

➢ TRUNCATE TABLE 語句:

 

刪除表中全部記錄

 

 

 

復位HWM

釋放表的存儲空間

➢ 不能回退

➢ 和DELETE同樣,是刪除記錄的手段之一

 

在表中加註釋

 

➢ 使用COMMENT語句可向表或表中的列加註釋

 

 

能夠經過在表上右擊選擇view查看註釋,也能夠經過命令查看

 

給字段添加註釋,只能逐個字段添加註釋,不能一塊兒添加

 

 

 

➢ 可經過以下數據字典視圖看註釋:(用select * from)

 

ALL_COL_COMMENTS

USER_COL_COMMENTS

ALL_TAB_COMMENTS

USER_TAB_COMMENTS

where限定表名,但這個時候表名已是table_name字段的值,因此必需要大寫或用upper參數

 

 

小結

 

 

 

 

 

10、約束

 

• 瞭解什麼是約束 

• 建立約束和維護約束

 

什麼是約束

 

➢ 約束是表級強制執行的規則.

➢ 當表中數據有相互依賴性時,可保護數據不被刪除.

➢ Oracle 有以下類型的約束:

NOT NULL    ----非空

UNIQUE Key    ----惟一

PRIMARY KEY    ----主鍵

FOREIGN KEY    ----外鍵

CHECK    ----檢查

 

 

約束概況

 

➢ Oracle使用 SYS_Cn 格式命名約束 

➢ 建立約束:

在建表的同時建立

建表後建立

➢ 可定義列級或表級約束.

➢ 可經過數據字典表查看約束.

 

 

建立約束

 

not null、check只能對列進行約束

 

 

 

 

給字段emp1.empno/emp.ename建立主鍵約束(非空且惟一)

 

 

非空約束(NOT NULL)

 

➢ 確保列值非空

 

 

 

這裏是從表級創建非空約束,定義了ename、deptno字段值不能爲空

 

 

惟一性約束(UNIQUE)

 

示例:

 

 

dname字段已經有sales存在,新添加的字段sales不能重複,即再同一字段不容許存在相同的值

 

 

 

主鍵約束( PRIMARY KEY)

 

 

 

 

要求在同一個字段內的值 惟一且非空

 

 

 

 

 

 

 

 

外鍵約束(FOREIGN KEY)

 

 

外鍵約束的字段被主鍵字段所約束,能夠爲空但不能是主鍵沒有的值

 

 

 

 

外鍵約束的關鍵字

 

➢ FOREIGN KEY

定義子表的哪一列做爲外鍵約束

 

➢ REFERENCES

指示主表和參照的列

 

➢ ON DELETE CASCADE

刪除主表記錄時將子表相關記錄刪除

 

➢ ON DELETE SET NULL

將外鍵引用置爲空值

 

 

CHECK 約束

 

➢ 定義每一記錄都要知足的條件

➢ 條件表達式不容許有:

CURRVAL, NEXTVAL, LEVEL, ROWNUM

SYSDATE, UID, USER, USERENV 函數

參照其餘記錄的值

 

建立的deptno的值只能在10~99之間

 

加約束

 

➢ 可加或刪除約束,但不能修改

➢ 可以使約束生效和失效

➢ 使用MODIFY子句可加 NOT NULL約束

 

使用modify給列增長not null約束

 

使用modify 給列去除not null約束

 

 

 

 

增長外鍵約束到EMP表

 

給mgr增長外鍵,參照主鍵empno

 

 

刪除約束

 

➢ 刪除約束emp_mgr_fk.

 

 

➢ 刪除主鍵約束和相關的外鍵約束.

 

 

 

使約束失效

 

➢ 在ALTER TABLE 語句中執行DISABLE子句可以使完整性約束失效

➢ 使用 CASCADE 選項可以使依賴的完整約束失效

 

 

 

使約束生效

 

➢ 使用ENABLE子句將失效的約束生效 

➢ 當使UNIQUE 或 PRIMARY KEY約束生效時,會自動建立 UNIQUE 或 PRIMARY KEY 索引.

 

 

 

注:也能夠經過view窗口使約束生/失效

 

 

 

查看約束

 

➢ 經過查看 USER_CONSTRAINTS 表可獲得用戶的全部約束.

 

 

 

查看約束創建在哪些列

 

➢ 經過查詢USER_CONS_COLUMNS 視圖可得到約束創建在哪些列上

 

 

 

11、視圖(view)

 

• 描述視圖

• 建立視圖

• 經過視圖得到數據

• 改變視圖的定義

• 經過視圖操做數據

• 刪除視圖

 

爲何使用視圖

 

➢ 限制對數據的訪問

➢ 很容易的寫成複雜的查詢

➢ 容許數據的獨立性

➢ 不一樣的視圖可得到相同的數據

 

簡單視圖和複雜視圖

 

 

 

建立視圖

 

➢ 建立視圖的語句中可嵌入子查詢.

➢ 子查詢中可包括複雜的 SELECT 語法.

➢ 子查詢中不能包含ORDER BY 子句

 

首先,scott用戶是沒有建立視圖的權限的,必須先以system帳戶對scott進行賦權:

 

 

 

建立視圖

 

➢ 在子查詢中使用列別名建立視圖.

 

 

 

SELECT  EMPLOYEE_NUMBER, NAME, SALARY

FROM salvu30;

 

 

查詢USER_VIEWS數據字典視圖

 

 

 

修改視圖

 

➢ 使用CREATE OR REPLACE VIEW 子句修改 視圖 ,併爲每列加別名.

➢ 在CREATE VIEW語句中列的別名的順序是和子查詢中一致的.

 

建立複雜的視圖

➢ 複雜視圖的特色:

從多個表查詢

包含函數

包含分組數據

 

 

 

 

對視圖進行DML操做的規則

 

➢ 可對簡單視圖執行DML操做

➢ 在下列狀況下不能刪除記錄:

視圖包括組函數

視圖包括GROUP BY 子句

視圖包括 DISTINCT

Rownum僞列關鍵詞

➢ 在下列狀況下不能修改記錄 :

前面所提到的狀況

列是由表達式定義的

包括ROWNUM 虛列

➢ 在下列狀況下不能添加記錄 :

前面所提到的狀況

視圖的基表有非空列,但在視圖中沒有此列

 

 

使用 WITH CHECK OPTION子句

 

➢ 使用WITH CHECK OPTION可以使DML操做限制在視圖所包含的範圍

內.

 

 

 

刪除視圖

 

➢ 刪除視圖並不刪除基表中的數據.

 

 

 

小結

 

➢ 視圖可從其餘的表或視圖中獲取數據.

➢ 視圖提供以下優勢:

限制數據的訪問

簡化查詢

提供獨立的數據

容許多個視圖使用相同的數據

刪除時不影響基表

 

12、 其餘數據庫對象

 

• 描述其餘的數據庫對象和使用

• 建立,修改,使用序列號

• 建立和維護索引

• 建立公共和私有的同義詞

 

數據庫對象

 

 

什麼是序列號

 

➢ 自動生成惟一的數字

➢ 是一個共享的對象

➢ 典型的應用於表的主鍵

➢ 可替代應用代碼

➢ 將序列號值放在緩存中可提升訪問速度

 

 

CREATE SEQUENCE 語句

 

➢ 定義序列號

Increment by n:遞增的量爲n

Maxvalue:最大值/nomaxvalue:沒有最大值

minvalue:最小值/nominvalue:沒有最小值

cycle:循環/nocycle:沒有循環

Cache n:緩存n條序列/不緩存

 

 

建立序列號

 

➢ 建立名字爲 DEPT_DEPTNO的序列號,以供DEPT表使用 .

➢ 不加 CYCLE 選項.

 

 

 

確認序列號

➢ 經過查詢USER_SEQUENCES 數據字典表,可檢查序列號的數值.

 

➢ LAST_NUMBER 列顯示下一個可用的序列號.

 

 

NEXTVAL 和 CURRVAL

 

➢ NEXTVAL 返回下一個可用序列號值

➢ CURRVAL 包含當前的序列號值

 

 

使用序列號

 

➢ 使用序列號插入記錄

 

➢ 查看插入的值

 

 

注:插入的值能夠不按順序,但必定要在設定的範圍內並無出現過。

 

修改序列號

 

➢ 可修改步增值,最大值,最小值, cycle選項, cache 選項.

 

➢ 修改的規則:

你必須是序列號的全部者並有ALTER權限.

只對之後的序列號受影響.

序列號可被刪除並重建,以得到新的開始值.

一些確認被執行. 例如:MAXVALUE不能小於當前序列號.

 

 

刪除序列號

 

➢ 使用 DROP SEQUENCE 語句刪除序列號.

 

 

什麼是索引

 

➢ 是一種對象

➢ 使用指針加快記錄訪問速度

➢ 減少硬盤 I/O

➢ 索引獨立於表而存在

➢ 數據庫自動使用和維護

 

怎樣建索引

 

➢ 自動

惟一性索引自動被建立,當定義 PRIMARY KEY 或 UNIQUE 約

束時.

➢ 手動

使用CREATE INDEX命令.

 

建立索引

 

➢ 可基於一列或多列建立索引

➢ 例子:

 

 

建立索引規則

 

➢ 索引列應該常常在 WHERE 子句中,或是鏈接條件.

➢ 此列值域比較廣.

➢ 此列包含大量空值.

➢ 在 WHERE 子句或鏈接條件中常常一塊兒使用的列.

➢ 對大表查詢的結果小於總數據的2~4% .

 

下列的表不適合建索引:

表很小

列不常常在WHERE子句中使用

對大表查詢的結果大於總數據的2~4% .

表常常被修改

 

 

確認索引

 

➢ USER_INDEXES.

➢ USER_IND_COLUMNS .

 

 

 

刪除索引

 

➢ 刪除索引.

 

➢ 必須是索引的擁有者或者有 DROP ANY INDEX 權限.

 

 

同義詞

 

➢ 同義詞是數據庫對象的另一個名字,以方便使用.

參照其餘用戶的表.

較短的對象名.

 

 

加public表明全部人均可以用,不加表示只有當前用戶能夠用這個同義詞

 

建立和刪除同義詞

 

➢ 建立.

 

➢ 刪除.

 

 

 

小結

➢ 自動生成序列號.

➢ 查看序列號的信息(USER_SEQUENCES).

➢ 建索引提升性能.

➢ 查看索引信息(USER_INDEXES).

➢ 使用同義詞.

 

 

 

第十三章 用戶及權限


• 建立用戶
• 建立角色
• 受權和收回權限

 

 

權限


➢數據庫的安全性
➢ 系統安全性
➢ 數據安全性
➢系統權限: 得到後可訪問數據庫
➢對象權限: 操做數據庫對象的內容
➢Schema: 對象的集合(tables, views, sequences)

 

 

 

系統權限


➢ 多於100種系統權限可用
➢ DBA 有最高系統權限.
Create new users(建立新用戶)
Remove users(刪除用戶)
Remove tables(刪除表)
Backup tables(備份表)

 

建用戶


➢ DBA 可以使用 CREATE USER 語句建用戶.

 

使用系統權限


➢ 建立用戶後,DBA需授給用戶系統權限.
➢ 一個應用開發者應有下列系統權限:
CREATE SESSION(創建會話的權限)
CREATE TABLE(建表權限)
CREATE SEQUENCE(建序列號權限)
CREATE VIEW(建視圖權限)
CREATE PROCEDURE(存儲過程權限)

 

 

授予系統權限


➢ DBA 可將指定的系統權限授予用戶.

 

 

 

什麼是角色(經過角色賦予權限)

 

 

 

 

建立角色,用角色同時給多用戶受權

 

 

改變用戶口令


➢ 當建用戶時會初始化一個口令.
➢ 用戶可以使用 ALTER USER 語句改變口令.

 

 

對象權限 

➢ 對象不一樣,對象權限也不一樣.
➢ 對象的全部者擁有對象的全部權限.
➢ 對象的全部者可將指定的權限授予其餘的用戶.

 

 

 

授予對象權限

 

指定對象權限賦予給用戶

 

指定對象特定列的權限賦予給用戶 

 

 

使用WITH GRANT OPTION 和 PUBLIC 關鍵字
➢ 使被授予的用戶可轉授此權限.

 

 

➢ 全部的用戶均可查詢此表

 

 

 

 確認權限的數據字典表

 

 

 

 

收回對象的權限


➢ 使用REVOKE語句從其餘用戶收回權限.
➢ 經過 WITH GRANT OPTION授予的權限也可收回.

 

 

 

小結

 

相關文章
相關標籤/搜索