Oracle資料庫中資料操作和事務控制以及鎖
表資料的操作(DML):
插入:
修改:
刪除:
合併:大資料操作的時候,資料倉庫
插入:使用values只能插入一行資料
插入空值:
1)不寫
2)插入空串
3)null
插入日期:
1)按照Oracle標準日期格式插入,'dd-mm月-yyyy'
2)to_date('','yyyy-mm-dd')
3)to_char同to_date
特殊字元&:
在SQL Plus或者cmd中設定
1)show escape; --檢視escape狀態
2)escape off --返回escape狀態為off
3)set escape on; --設定escape狀態為on
4)show escape --檢視escape狀態
5)escape "\" (hex 5c) 返回escape符號為"\"
6)在insert語句中使用'\'對特殊符號進行轉義
插入多行:
子查詢:巢狀子查詢,相關子查詢
INSERT INTO mydept(deptno,dname,loc) SELECT * FROM dept ;--插入中的子查詢不需要加()
建立表:
CREATE TABLE 表名 AS SELECT * FROM emp WHERE 1=0;--where條件恆不成立表示只要表結構不要資料;若where條件成立表示要滿足where條件的資料;不加where條件表示既要表結構又要資料
合併:如果匹配則修改,如果不匹配則插入
語法:
MERGE INTO mydept m --目標表
USING dept d --原表
ON ( m.deptno=d.deptno ) --條件
WHEN MATCHED THEN
UPDATE SET
dname='zzz',loc='zzz' WHERE deptno=11
WHEN NOT MATCHED THEN
INSERT(m.deptno,m.dname,m.loc)
VALUES(d.deptno,d.dname,d.loc);
rowid:偽列,是表中的虛擬的列,是系統自動產生的,效率最快
表示一行的實體地址,可以唯一標識該行
前6位:資料物件編號,接下3位:相關檔案編號,接下6位:塊編號,末3位:行號
事務:
概念:
事務也稱工作單元,是由一個或者多個SQL語句所組成的操作序列的集合,這些SQL語句作為一個完整的工作單元(Oracle最小的工作單元,不可分割),要麼全部執行成功,要麼全部執行失敗.在資料庫中,通過事務來保證資料的一致性
事務處理語言:TPL
對組成事務的DML語句的操作結果進行確認或取消(commit,rollback)
事務的組成:
在資料庫中,事務由一組相關的DML或select語句,加上一個TPL語句(commit,rollback)或一個DDL語句(create,alter,drop,truncate等)或一個DCL語句(grant,revoke)組成.
DDL語句,DCL語句資料庫進行隱式提交.
事務特徵:(ACID)
1)原子性(Atomicity):
事務就像原子一樣,不可被分割,組成事務的DML操作語句要麼全部執行成功,要麼全部執行失敗,不可能出現部分失敗的情況
2)一致性(Consistency):
一旦事務完成,不管是成功的還是失敗的,整個系統處於資料一致的狀態.
3)隔離性(Isolation):
一個事務的執行不會被另一個事務所幹擾
4)永續性(Durability):
也成為永久性,事務一旦提交,對資料的改變就是永久的,不可以再被回滾
事務分類:
1)顯式事務:
1-1)顯式提交:commit
以成功的方式結束事務,組成事務的DML語句全部生效
1-2)顯式回滾:rollback
以失敗的方式結束事務,組成事務的DML語句全部取消
1-3)儲存點:savepoint
2)隱式事務:
2-1)隱式提交:當下列任意一種情況發生時,會發生隱式提交
2-1-1)執行一個DDL(create,alter,drop,truncate,rename)語句;
2-1-2)執行一個DCL(grant,revoke)語句;
2-1-3)從SQL Plus正常退出(使用exit或quit命令退出)
2-2)隱式回滾:當下列任意一種情況發生時,會發生隱式回滾
2-2-1)從SQL Plus中強制退出
2-2-2)客戶端連線到伺服器端異常中斷
2-2-3)系統崩潰
事務的開始和結束:
事務開始:
事務自動開啟於上一個事務結束後第一個執行的DML語句
事務結束:
顯式結束:事務在遇到commit或者rollback時結束
隱式結束:執行隱式事務時會自動結束事務
設定儲存點:
如果在一個事物內,想要回滾到指定的位置,不是回滾到事務的起始點,可以通過儲存點實現
savepoint sp;--定義一個儲存點語句
rollback to sp;--回滾到指定儲存點
以上兩條語句不結束事務的執行
Oracle的鎖機制:
概念:
1)鎖是用來在多使用者併發訪問和操作資料庫時,保證資料的一致性的一種機制
2)鎖有Oracle自動管理,如一個DML操作,Oracle預設的機制是在DML操作映像的行記錄上自動加鎖
3)鎖在被相關的操作申請並持有後,會一直保持到事務的結束,事務結束後,鎖才會被釋放
4)查詢語句不會鎖定任何記錄,如果在查詢語句後面加for update子句會鎖定查詢所影響的行記錄
1)行級加鎖:預設行級鎖,針對dml語句
2)表級加鎖:
Oracle加鎖方式:
1)自動加鎖:使用者在執行insert,update,delete,DCl,DDL語句時,Oracle會自動加鎖
2)手動加鎖
2-1)表級加鎖:
LOCK TABLE 表名 IN 鎖型別 MODE [NOWAIT]
2-2)行級加鎖:
SELECT 查詢列 FROM 表名 FOR UPDATE [NOWAIT]
鎖的型別:
排它鎖(Exclusive):不能在其上再加其他鎖
共享鎖(share):可以在其上再加共享鎖
提交或回滾前資料狀態
1)資料變化前的狀態可以被恢復
2)當前會話可以使用select語句來驗證DML操作後的結果
3)其他會話不能檢視當前使用者的DML操作結果
4)受影響紀錄被鎖定,也就是其他使用者不能改變受影響記錄中的資料
提交後資料狀態
1)在資料庫中資料變化為永久性的,先前的資料狀態永久性消失
2)所有使用者/會話都可以查詢到提交後的結果
3)鎖定的記錄被釋放,可以有效地被其他使用者操作
4)所有的儲存節點被清除
回滾後資料狀態
1)先前的資料狀態被恢復
2)鎖定的記錄被釋放
3)所有的儲存節點被清除