oracle數據庫SQL開發之數據操作與事務控制

一、數據操作語言

– Data Manipulation Language ,簡稱DML,主要用來實現對
數據庫表中的數據進行操作。
– 數據操作語言主要包括如下幾種:
增加行數據:使用 insert語句 實現
修改行數據:使用 update語句 實現
刪除行數據:使用 delete語句 實現
合併行數據:按照指定條件合併兩個表的數據,使用 merge語句 實現
 
 

(一)插入數據 insert

.–.向部門表新增一個部門,部門編號爲50,部門名稱爲HR,工作地點爲SY。

insert into dept
      	 values (50,'HR','SY'); --插入數據insert into 表名 values ();
select * from dept;

1.插入空值null(隱含法、顯示法)
–.向部門表新增一個部門,部門編號爲60,部門名稱爲MARKET(隱含法)

insert into dept (deptno,dname)				--隱含法
       values (60,'MARKET');
insert into dept         ---------(顯示法)
       values (60,'MARKET''null')

2.插入日期型
(1)插入 sysdate 函數記錄當前日期和時間
(2)插入 to_date函數轉換成要求的日期型數據

3.插入特字符& 在其前加上 \ 如: ‘& dafdad &’; escape 轉義符

4.多行插入
–創建經理表

CREATE TABLE manager AS SELECT * FROM emp WHERE 1=0; --獲取emp表頭並create表

–多行插入不用values

INSERT INTO manager SELECT * FROM emp WHERE job = 'MANAGER'; --查詢獲取的結果是多行的

 
 

(二)修改數據 update

.• 修改數據使用UPDATE子句完成,語法結構如下:

 UPDATE table
    SET column = value [, column = value]
    [WHERE  condition];

–把員工編號爲 7782 的部門編號修改爲20

SQL> UPDATE  emp
         SET deptno = 20
         WHERE empno = 7782;

1.一次修改多列
–把部門編號爲 10 的員工,部門編號調整爲 20 ,工資增加1000

update emp set dept = 20,sal=sal+100 where dept =10;

2.嵌入子查詢修改

–– 把部門編號爲 10 的員工,部門編號調整爲 20,工資在原有的基礎上,增加所有人的平均工資

update emp 
set dept = 20,sal=sal+(select avg(emp.sal) from emp)
where dept =10;

3.相關子查詢修改
. 在 emp 表中增加一個列, dname,

alter table emp add(dname varchar2(14));

例 2. 使用相關子查詢更新 dname 列爲正確的部門名稱。

updete emp e
    set dname =(select dname
                            from dept d
                            where deptno = e.deptno);

4.修改記錄時的注意部範 完整性約束錯誤
 

(三)刪除數據delete

DELETE [FROM] table
        [WHERE condition];

–刪除員工編號爲7856的信息

delete from emp where empno = 7856;

1.本表單行刪除
2.基於另一個表刪除本表記錄 (子查詢)
3.刪除記錄時的完整性約束錯誤
4.相關delect
– 使用相關delect,你可以使用相關子查詢來只刪除那些已經存在於另一張表中的行。
 
 

二、事務控制

(一)事務

事務:也稱工作單元,是由一個或多個SQL語句所組成的操作序列,這些SQL語句作爲一個完整的工作單元,要麼全部執行成功,要麼全部執行失敗。在數據庫中,通過事務來保證數據的一致性。

事務處理語言:Transaction Process Language ,簡稱TPL,主要用來對組成事務的DML語句的操作結果進行確認或取消。
–確認也就是使DML操作生效,使用提交(commit)命令實現;
–取消也就是使DML操作失效,使用回滾(rollback)命令實現。
 

(二)事務組成

– 在數據庫中,事務由一組相關的DML或SELECT語句,加上一個TPL語句(commit、roolback)或一個DDL語句(create、alter、drop、truncate等)或一個DCL(grant、remove)語句。
 

(三)事務結束

(1)顯示結束
– 提交(COMMIT):使用COMMIT命令實現,以成功的方式結束事務,組成事務的DML語句操作全部生效。
– 回滾(ROLLBACK):使用ROLLBACK命令實現,以失敗的方式結束事務,組成事務的DML語句操作全部被取消。

(2)隱式結束
– 隱式提交:當下列任意一種情況發生時,會發生隱式提交
• 執行一個DDL(CREATE、ALTER、DROP、TRUNCATE、RENAME)語句;
• 執行一個DCL(GRANT、REVOKE)語句;
• 從SQLPlus正常退出(即使用EXIT或QUIT命令退出);
– 隱式回滾:當下列任意一種情況發生時,會發生隱式回滾
• 從SQL*Plus中強行退出
• 客戶端連接到服務器端異常中斷
• 系統崩潰
 

(四)設置保存點

如果在一個事務內,想要回滾到指定位置,不是回滾到事務的起始點,可以通過保存**(savepoint)**來實現。
savepoint savepointname ;–定義一個保存點語句;
rollback to savepointname ;–回滾到指定保存點
– 注意:如上兩條語句不結束事務的執行。
 
 

三、事務特徵

.事務特徵可用四個字母的縮寫表示:即ACID(重點知識)

原子性Atomicity)
• 事務就像“原子”一樣,不可被分割,組成事務的DML操作語句要麼全成功,要麼全失敗,不可能出現部分成功部分失敗的情況。

一致性Consistency)
• 一旦事務完成,不管是成功的,還是失敗的,整個系統處於數據一致的狀態。

隔離性Isolation)
一個事務的執行不會被 另一個事務所幹擾。比如兩個人同時
從一個賬戶從取錢,通過事務的隔離性確保賬戶餘額的正確性。

持久性Durability)
• 也稱爲永久性,指事務一旦提交,對數據的改變就是永久的,不可以再被回滾。
 

四、事務鎖

1.鎖的概念
–鎖用來在多用戶併發訪問和操作數據庫時,保證數據的一致性的一種機制;

– 鎖由Oracle自動管理,如一個DML操作,oracle默認的機制是在DML操作影響的行記錄上自動加鎖;

– 鎖在被相關的操作申請並持有後,會一直保持到事務的結束,事務結束後,鎖纔會被釋放;

 
 
 
2.– 查詢語句不會鎖定任何記錄,純粹的select查詢可以查詢數據,如果在查詢語句後面加for update子句會鎖定查詢所影響的行記錄;

–select …for update (skip locked); 加上了行鎖
skip locked 是篩選掉被其他會話加上鎖的部分數據行
一個會話中select子句末尾加上for update後,該查詢結果的原表該部分數據會上鎖,
另一個會話不能操作該部分數據。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章