1. 程式人生 > 其它 >1.7 Oracle資料庫學習教程-集合運算&資料處理

1.7 Oracle資料庫學習教程-集合運算&資料處理

Oracle資料庫學習教程

集合運算&資料處理

集合運算

問題:查詢部門號10和20的員工的資訊:

  1. select * from emp where deptno in(10,20);
  2. select * from emp where deptno = 10 or deptno = 20;
  3. 集合運算

集合運算的物件是兩個集合
常用的有: \(A \bigcap B\),\(A \bigcup B\),\(A-B\)

  • 並集:union/union all
  • 交集:intersect
  • 差集:minus

上面的問題改寫為集合運算版本:


    select * from emp where deptno = 10
    union
    select * from emp where deptno = 20;

注意事項:

  1. 參與運算的各個集合必須列數相同,型別一致
  2. 表頭採用第一個集合的
  3. 會先執行帶()的語句

資料處理

0. SQL語言型別

  1. DML語句(資料操作語言): insert,update,delete,select
  2. DDL語句(資料定義語言): create table,create view(檢視),create index(索引),create sequence(序列)
  3. DCL語句(資料控制語言):grant(賦權),revoke(回收許可權)

1. 插入資料insert

insert into table[列1..] values (值1...);
如:


insert into emp values (1001,'TOM','Engineer',7839, sysdate,5000,200,10);

insert into emp(empno, ename, sal, deptno) values(1002, 'Marry', 6000, 20);

1. &地址符:
SQL> insert into emp(empno, ename, sal, deptno) values(&empno, &ename, &sal, &deptno);
加上&符號,下次輸入/號就可以繼續賦值了,&後面的可以任意寫,一般和前面相同

2. 批處理:

先創一張相同結構的表,不要有資料(where 假):
create table emp10 as select * from emp where 1=2;

然後插入一批資料:
insert into emp10 select * from emp where deptno=10 ;

2. 更新資料

更新操作一般會使用where來改一部分資料

update emp10 set sal=4000, comm=300 where ename = 'CLARK'; ( 或 where empno=7782; )

刪除資料delete

delete from emp10 where empno=7782;(或ename= 'KING');

注意:“from”關鍵字在Oracle中可以省略不寫,但MySQL中不可以。

delete和truncate的區別:

  1. delete是刪除一條資料,而truncate是先摧毀表再重建.
  2. delete效能更優.
  3. delete不會釋放空間,truncate會釋放空間
  4. delete可以回滾,truncate不能回滾.
  5. delete會產生碎片,truncate不會.

事務

資料庫事務,是由有限的資料庫操作序列組成的邏輯執行單元,這一系列操作要麼全部執行,要麼全部放棄執行。
要麼都成功,要麼都失敗.

比如銀行轉帳,A轉1000給B:1.A-1000,2.B+1000.這兩步要捆綁一起.
成功了就commit提交,失敗了就rollback回滾

事務的特性:
事務4大特性(ACID):原子性、一致性、隔離性、永續性。

事務的起始標誌:Oracle中自動開啟事務,以DML語句為開啟標誌。
執行一個增刪改查語句,只要沒有提交commit和回滾rollback,操作都在一個事務中。

事務的結束標誌:提交、回滾都是事務的結束標誌。
提交:

  • 顯示提交:commit
  • 隱式提交:
    • 有DDL語句,如:create table除了建立表之外還會隱式提交Create之前所有沒有提交的DML語句。
    • 正常退出(exit / quit)

回滾:

  • 顯示回滾:rollback
  • 隱式回滾:掉電、宕機、非正常退出。

還可以增加儲存點(savepoint),相當於存檔.可以使用rollback回滾到指定的儲存點.

隔離級別:

對於同時執行的多個事務, 當這些事務訪問資料庫中相同的資料時, 如果沒有采取必要的隔離機制, 就會導致各種併發問題:

  • 髒讀: 對於兩個事物 T1, T2, T1 讀取了已經被 T2 更新但還沒有被提交的欄位. 之後, 若 T2 回滾, T1讀取的內容就是臨時且無效的.
  • 不可重複讀: 對於兩個事物 T1, T2, T1 讀取了一個欄位, 然後 T2 更新了該欄位. 之後, T1再次讀取同一個欄位, 值就不同了.
  • 幻讀: 對於兩個事物 T1, T2, T1 從一個表中讀取了一個欄位, 然後 T2 在該表中插入了一些新的行. 之後, 如果 T1 再次讀取同一個表, 就會多出幾行.

Oracle支援的隔離級別: Read Commited(預設)和 Serializable,以及Oracle自定義的Read Only三種。
Read Only:由於大多數情況下,在事務操作的過程中,不希望別人也來操作,但是如果將別人的隔離級別設定為Serializable(序列),但是單執行緒會導致資料庫的效能太差。是應該允許別人來進行read操作的。

mysql支援以上四種, Oracle預設讀已提交資料,mysql預設可重複讀。

本文來自部落格園,作者:Ovins,轉載請註明原文連結:https://www.cnblogs.com/ovins/p/15376387.html

喜歡請點關注❤️ ❤️ ❤️