數據庫的多表查詢和事務


本節內容

1.多表查詢

2.事務

多表查詢:

查詢語法

select 
  列名列表
from   表名列表 where ...

准備sql

#創建部門表
CREATE TABLE dept();
#創建員工表
CREATE TABLE emp();

笛卡爾積:
有兩個集合A,B,去這兩個集合的所有組成情況.
要完成多表查詢,需要消除無用的數據

多表查詢的分類:
1.內連接查詢

  1. 隱式內連接:使用where條件消除無用數據
  2. 顯示連接:語法:select 字段列表 from 表名1 [inner] join 表名2 on 條件
  3. 內連接查詢:
  • 從那些表中查詢數據
  • 條件是什么
  • 查詢那些字段

2.外連接查詢
1.左外連接:

語法:select 字段列表 from 表1 left [outer] join 表2 on 條件;
查詢的是左表所有數據以及其交集部分.

2.右外連接

語法:select 字段列表 from 表1 right [outer] join 表2 on 條件;
查詢的是右表所有數據以及其交集部分.

子查詢:

概念:查詢中嵌套查詢,稱嵌套查詢為子查詢
--查詢工資最高的員工信息

--1查詢最高的工資是多少 9000
SELECT MAX(salary) FROM emp;
--2 查詢員工信息,並且工資等於9000的 select * from emp WHERE emp.'salary'=9000; --一條sql就完成這個操作.子查詢 SELECT * FROM emp WHERE emp.'salary' = (SELECT MAX(salary) FROM emp);

事務

1.事務的基本介紹
概念:
如果一個包含多個步驟的業務操作,被事務管理,那么這些操作要么同時成功,要么同時失敗.
操作:

  1. 開啟事務:start transaction;
  2. 回滾:rollback;
  3. 提交:commit;

2.事務的四大特征

  1. 原子性:是不可分割的最小操作單位,要么同時成功,要么同時失敗.
  2. 持久性:當事務提交或回滾后,數據庫會持久化的保存數據
  3. 隔離性:多個事務之間,相互獨立.
  4. 一致性:事務操作前后,數據總量不變

3.事務的隔離級別
概念:多個事務之間隔離的,相互獨立的.但是如果多個事務操作同一批數據,則會引發一些問題,設置不同的隔離級別就可以解決這些問題.
存在問題:

  1. 臟讀:一個事務,讀取到另一個事務中沒有提交的數據
  2. 不可重復讀(虛讀):在同一個事物中,兩次讀取到的數據不一樣.
  3. 幻讀:一個事務操作(DML)數據表中所有記錄,另一個事務添加了一條數據,則第一個事務查詢不到自己的修改.

隔離級別:

1.read uncommmitted:讀未提交
產生的問題:臟讀,不可重復讀,幻讀

2.read committed :讀已提交(Oracle) 產生的問題:不可重復讀,幻讀 3.repeatable read:可重復讀(MySQL默認) 產生的問題:幻讀 4.serializable:串行化 可以解決所有的問題

注意:隔離級別從小到大安全性越來越高,但是效率越來越低

數據庫查詢隔離級別:

select @@tx_isolation

數據庫設置隔離級別:

set global transaction isolation level 級別字符串;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM