MySQL 多表查詢、事務

1.多表查詢的分類

1.1 內連接

????????在 MySQL 中,內連接(INNER JOIN)返回的是兩個表中滿足連接條件的記錄的交集。這個“交集”不是指整個表,而是指符合連接條件的行組合,也就是A表和B表中滿足我們使用on指定條件的記錄。圖中綠色部分

1.1.1 隱式內連接

? ? ? ? select 字段列表?from 表1 表1別名 , 表2? 表2別名? where 條件;

? ? ? ? 如果我們給表指定了別名,那么就不能使用原表明指定條件,只能使用別名。

1.1.2?顯式內連接

? ? ? ? select 字段列表 from 表1 inner join 表2 on 連接條件;

1.2 左外連接

? ? ? ? 顧名思義,左外連接的結果包含左表中的所有數據,也包括右表中滿足條件的數據,圖中的藍色和綠色部分,右表記錄不足的地方會填充為null

? ? ? ? 語句:select 字段列表 from 表名1 [別名] left? ?[outer]? ?join 表名2 [別名] on 連接條件;

1.3 右連接

? ? ? ? 右外連接的結果和左外連接相反,它包括右表中的所有數據和左表中滿足條件的數據,圖中的綠色和黃色部分,左表中不足的數據也會被填充為null

????????語句:select 字段列表 from 表名1 [別名] right? ?[outer]? ?join 表名2 [別名] on 連接條件;

左外連接和右外連接可以相互轉換,只需要調換表明出現的位置即可:

select 字段列表 from 表名1 [別名] right? ?[outer]? ?join 表名2 [別名] on 連接條件;

和下面的語句相同:

select 字段列表 from 表名2?[別名] left? ?[outer]? ?join 表名1??[別名] on 連接條件;

1.4 自連接

? ? ? ? 自連接就是做連接查詢的表是同一個,此時必須給表取別名區分

select 字段列表 from 表名1 [別名1] right? ?[outer]? ?join 表名1?[別名2] on 連接條件;

自連接可以是內連接,左連接和右連接

1.5 聯合查詢

? ? ? ? 用法:select語句1? ? union? [all]? ? ?select語句2?

添加 all 相當于把兩次查詢的結果直接組合起來,如果有記錄滿足兩個select語句的條件,那么它會出現兩次,如果不添加 all 則會去重,相同的記錄只出現一次。
兩次查詢的字段數和字段類型都必須相同,否則會報錯。

1.6 子查詢

1.6.1 標量子查詢

? ? ? ? 標量子查詢是指子查詢的返回值只有一個值,使用的操作符通常是 = , <> , >, <? ,<=,? >=

1.6.2 列子查詢

如果是查詢任意一人,那么可以any和some,它們的效果是一樣的

1.6.3 行子查詢

1.6.4 表子查詢

? ? ? ? 表子查詢的返回值是多行多列,可以出現在from后,我們可以把他理解成一個虛擬表,我們從這個虛擬表中查詢數據,也可以出現在where后,此時我們使用in查詢滿足條件的記錄

2.事務

2.1 事務簡介

? ? ? ? 事務是一組操作的集合,這組操作必須全部成功或者全部失敗。比如銀行轉賬的步驟:A賬戶扣錢,B賬戶加錢 這兩步操作必須全部成功或者失敗,不能單獨某一步成功或失敗。

2.2 通過@@autocommit實現事務


-- 查詢事務是否自動提交  1:自動提交   0:手動提交
select @@autocommit;-- 設置事務為手動提交
set @@autocommit = 0;update student set name='333' where id=1;delete; -- 模擬程序運行錯誤update student set name='444' where id=2;-- 提交事務,在整體流程完成后
commit;-- 回滾事務,在流程出錯后必須執行!
rollback;

2.3 通過 begin 或 start transaction

start transaction ; -- 也可以是 begin
update student set name='333' where id=1;
delete; -- 模擬程序運行錯誤
update student set name='444' where id=2;-- 提交事務,在整體流程完成后
commit;-- 回滾事務,在流程出錯后必須執行!
rollback;

2.4 事務的四大特性

2.4.1 原子性

? ? ? ? 原子性的意思是事務是不可分割的最小單元,要么全部成功,要么全部失敗

2.4.2 一致性

? ? ? ? 事務完成時,必須使所有的數據保持一致

2.4.3 隔離性

? ? ? ? 數據庫系統提供的隔離機制,保證事務在不受外部并發操作的影響下執行。

2.4.4 持久性

? ? ? ? 事務在提交后,對數據庫的影響是永久的

2.5 并發事務的問題(臟讀,幻讀,不可重復讀)

2.6 事務隔離的級別

read uncommitted的意思是 讀未提交,此時事務可以讀取到另一并發事務未提交的內容,所以會出現臟讀,幻讀,不可重復讀得問題

read committed意思是 讀已提交,顧名思義,只能讀取并發事務已經提交的數據,也就解決了臟讀的問題,但幻讀和不可重復讀問題依舊存在

repeatable read意思是 重復讀 ,在read committed的基礎上解決了不可重復讀的問題,也是mysql默認的事務隔離級別。

serializable意思是串行化的,也就是直接禁止了事務的并發執行,讓事務串行執行,也就解決了所有的問題,但是效率比較低。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/87400.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/87400.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/87400.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

CSP-J 2020 入門級 第一輪(初賽) 答案及解析

CSP-J 2020 入門級 第一輪&#xff08;初賽&#xff09; 答案及解析 在內存儲器中每個存儲單元都被賦予一個唯一的序號&#xff0c;稱為&#xff08;&#xff09;。 A. 地址 B. 序號 C. 下標 D. 編號 答: A 計算機中每個存儲單元都是1字節&#xff0c;都有唯一的地址。 編譯器…

Flutter包管理與插件開發完全指南

Flutter作為Google推出的跨平臺移動應用開發框架&#xff0c;其強大的生態系統離不開完善的包管理機制和豐富的插件支持。本文將全面介紹Flutter中的包管理體系和插件開發實踐&#xff0c;幫助開發者高效管理項目依賴并擴展應用功能。 一、Flutter包管理基礎 1.1 包管理概述 …

【視頻直播出海】阿里云ApsaraVideo Live:從零搭建全球直播平臺的“星際航行”指南!

【視頻直播出海】阿里云ApsaraVideo Live&#xff1a;從零搭建全球直播平臺的“星際航行”指南&#xff01; 在全球化浪潮的推動下&#xff0c;視頻直播行業正以前所未有的速度跨越國界&#xff0c;成為連接世界的“數字新橋梁”。對于渴望拓展海外市場的企業而言&#xff0c;…

OAuth2中的Token

兩個不同的Token OAuth2 中主要有兩個不同的Token, 其中的區別為是否與用戶相關聯, 即與用戶相關的用戶Token, 和與客戶端相關的客戶端Token, 可以通過用戶Token, 查詢到用戶的相關信息, 客戶端Token與用戶無關, 一般只用于客戶端認證 用戶Token 獲取用戶Token一般有兩個方式…

使用 FastMCP 實現 Word 文檔與 JSON 數據互轉的 Python 服務

一、項目背景 本文分享一個基于 FastMCP 框架實現的文檔處理服務&#xff0c;可實現 Word 文檔&#xff08;.docx&#xff09;與 JSON 數據格式的雙向轉換。通過此服務&#xff0c;開發者可以輕松實現文檔內容提取、結構化數據填充、樣式模板復用等功能&#xff0c;適用于自動…

Vue3輪播圖組件,當前輪播區域有當前圖和左右兩邊圖,兩邊圖各顯示一半,支持點擊跳轉和手動滑動切換

功能&#xff1a; 自動循環播放&#xff08;到達末尾后回到第一張&#xff09;、可設置切換間隔時間&#xff08;interval屬性&#xff09; 左右導航按鈕&#xff08;可自定義顯示/隱藏&#xff09; 點擊底部指示器跳轉到指定幻燈片、且位置可調&#xff08;輪播圖內部/外部&…

350+交付案例,高質量低成本構建智慧園區數字孿生交付新范式

在智慧園區建設領域&#xff0c;數字孿生技術正成為推動園區智能化轉型的核心引擎。山東融谷信息憑借其全要素、全周期、全方位的數字孿生交付能力&#xff0c;已成功交付350余個項目&#xff0c;覆蓋產業園區、智慧樓宇、智慧社區等多元場景&#xff0c;低成本高質量交付&…

OpenCV 圖像像素類型轉換與歸一化

一、知識點 1、OpenCV支持多種數據類型&#xff0c;每種類型都對應著不同的取值范圍。 (1)、CV_8U取值范圍[0, 255]。 (2)、CV_16U取值范圍[0, 65535]。 (3)、CV_32F取值范圍[0, 1]。 2、OpenCV提供convertTo()函數來轉換數據類型&#xff0c;提供normalize()函數來改…

機器學習算法_支持向量機

一、支持向量機 支持向量機只能做二分類任務 SVM全稱支持向量機&#xff0c;即尋找到一個超平面使樣本分成兩類&#xff0c;且間隔最大 硬間隔&#xff1a;如果樣本線性可分&#xff0c;在所有樣本分類都正確的情況下&#xff0c;尋找最大間隔&#xff1b;如果出現異常值或樣…

Linux : echo ~ tail 重定向符

&#x1f680; Linux 常用命令詳解&#xff1a;echo、tail 與重定向符號全解析&#xff08;含通俗案例&#xff09; &#x1f4c5; 更新時間&#xff1a;2025年6月17日 &#x1f3f7;? 標簽&#xff1a;Linux基礎 | Shell命令 | echo | tail | 輸出重定向 | Linux入門 文章目錄…

uniapp的更新流程【安卓、IOS、熱更新】

UniApp應用更新方案 兩種更新方式 APP全量升級&#xff1a;需要重新下載安裝包熱更新&#xff1a;通過下載wgt資源包實現&#xff0c;用戶只需重啟應用 Android更新實現 用戶需要授權安裝權限&#xff0c;流程為下載APK后自動彈出安裝界面 var dtask plus.downloader.cre…

火山引擎解碼生態型增長鐵律

“技術流量與力量的崛起&#xff0c;本質上是一場生態規模的競賽。每次浪潮的排頭兵&#xff0c;都是指尖沾著代碼的開發者——互聯網時代的Linux社區讓開源席卷全球&#xff0c;移動互聯網的App Store催生百萬開發者&#xff0c;而今天&#xff0c;大模型正在用API重構產業。”…

警惕GO的重復初始化

go的初始化方式有很多種&#xff0c;在某些情況下容易引起重復初始化導致錯誤。 事例如下&#xff1a; 當使用gorm連接數據庫時定義了全局DB var DB *gorm.DB 但是在后面某個函數內部初始化時導致DB重新初始化變成了局部變量&#xff0c;導致原來的全局變量DB還是nil func I…

python校園服務交流系統

目錄 技術棧介紹具體實現截圖系統設計研究方法&#xff1a;設計步驟設計流程核心代碼部分展示研究方法詳細視頻演示試驗方案論文大綱源碼獲取/詳細視頻演示 技術棧介紹 Django-SpringBoot-php-Node.js-flask 本課題的研究方法和研究步驟基本合理&#xff0c;難度適中&#xf…

AlexNet:圖像分類領域的里程碑網絡及其創新剖析

文章目錄 前言AlexNet一、網絡的背景二、網絡結構三、網絡的創新3.1 首次使用GPU訓練網絡3.2 使用Relu激活函數3.2.1 sigmoid激活函數和tanh激活函數3.2.1.1 sigmoid激活函數3.2.1.2 tanh激活函數 3.3 Relu激活函數3.4 使用LRN局部響應歸一化(已棄用)3.4.1 LRN的定義與起源3.4.…

iOS性能調優實踐:結合KeyMob等多個工具提升應用穩定性與流暢度

在iOS應用開發中&#xff0c;性能問題往往難以通過單一工具輕松解決。尤其是當App面臨用戶反饋的流暢度差、卡頓嚴重、內存泄漏等問題時&#xff0c;開發者需要依靠多種工具的組合&#xff0c;才能有效地排查和優化性能瓶頸。 在我們最近的一個項目中&#xff0c;開發團隊在處…

球形波方程的推導與解法

題目 問題 6. 一個球形波是三維波動方程的解,形式為 u ( r , t ) u(r,t) u(r,t),其中 r r r 是到原點的距離(球坐標)。波動方程的形式為: u t t = c 2 ( u r r + 2 r u r ) (球形波方程) . u_{tt} = c^{2} \left( u_{rr} + \frac{2}{r} u_{r} \right) \quad \text{(球形…

自動打電話軟件設計與實現

文章目錄 方案概述實現代碼1. 安裝必要的庫2. 主程序代碼3. HTML模板 (templates/index.html) 功能說明部署說明擴展功能建議注意事項 方案概述 使用Twilio的API進行電話呼叫實現基本的呼叫邏輯添加簡單的用戶界面 實現代碼 1. 安裝必要的庫 pip install twilio flask2. 主…

RedissonLock源代碼分析與鎖應用

文章目錄 前言一、RedissonLock源代碼分析1.1 嘗試加鎖2.2 解鎖 二、鎖業務應用1.服務層方法注解方式 注入鎖1.1 定義DistributedLock 注解類1.2 定義DistributedLockAspect 切片類1.3 嘗試獲取鎖代碼片斷1.4 釋放鎖代碼片斷1.5 服務層注入鎖注解 2.代碼行加鎖2.1 pom.xml文件引…

深入理解mysql索引

一、什么是索引&#xff1f; 索引&#xff08;Index&#xff09; 是數據庫管理系統中一種特殊的數據結構&#xff0c;存儲在磁盤上。它包含對數據表中一列或多列的值進行排序&#xff0c;并存儲了指向表中實際數據行物理位置或主鍵值的引用指針。可以把它類比為書籍的目錄&…