JAVA進階--MySQL

一.MySQL架構

連接層:

? ? ? ? 處理客戶端連接服務,認證授權相關的操作

服務層:

? ? ? ? 最核心的一層(核心服務功能),處理sql,包括sql優化,函數調用....

存儲引擎層:

? ? ? ? 存儲引擎是真正負責來操作數據的(mysql中數據的存儲和提取), mysql中有不同存儲引擎,不同的引擎處理技術不同

物理文件層:

? ? ? ?存在電腦硬盤上的表數據,日志文件,負責與存儲引擎的數據交互

二.存儲引擎

? ? ? ? 存儲引擎是真正負責來操作數據的,不同的引擎處理技術不同

? ? ? ? ? ? ? ? ?(支持事務,行級鎖,外鍵約束,索引技術)

查看支持的引擎

? ? ? ?SHOWENGINES;

查看表引擎

? ? ? ?SHOWTABLE STATUS LIKE '表名'

修改引擎

? ? ? ?方式1:將mysql.ini 中default-storage-engine=InnoDB,重啟服務.

? ? ? ?方式2:建表時指定 CREATETABLE 表名(...)ENGINE=MYISAM;

? ? ? ?方式3:建表后修改 ALTERTABLE 表名 ENGINE=INNODB;

存儲引擎主要有:

? ? ? ? ? ? ?1.MyIsam,2.InnoDB,3.Memory,4.Blackhole,5.CSV,6. Performance_Schema, 7. Archive, 8. Federated , 9 Mrg_Myisam

但在實際開發中,需要根據具體的操作,來為表選擇合適的引擎

mysql中常用的兩種引擎:用MyIsam 和InnoDB

兩者的區別:

? ? ? innodb:支持事務,有行級鎖,外鍵約束

? ? ? myisam: 不支持事務,不支持行鎖,支持表鎖,不支持外鍵約束

? ? ? ? ? ? ? ? ? ?(因此當INSERT或UPDATE數據時即寫操作需要鎖定整個表)

eg:

? ?新增,修改,刪除操作比較多的表,建議使用innodb引擎

? ?查詢多的表(例如每月話費賬單表),只插入一次數據,后面都是查詢操作,建議使用myIsam引擎.

注:由于現在表數據量比較大,動輒需要對數據庫進行拆分,使用存儲過程,視圖,自定義函數這些內容移植性差,所以不建議使用了.

三.索引

1.為什么要用索引

? ? ? 表中存儲著大量數據,如果沒有索引,當我們需要查詢一條數據時,就要從第一條數據開始查詢,直到找到我們需要查詢的數據,這么查找效率太低,太耗時間和內存,所以需要索引

2.索引的優/缺點

優點:

? ? ?①減少了查詢次數, 降低IO成本(與硬盤交互次數),提高了數據檢索的效率

? ? ?②索引是已經排好序了的,通過索引給數據排序提高排序效率,減少來cpu的消耗

缺點:

? ? ?①索引的本質是一張表保存了主鍵與索引字段,并指向實體表的記錄,它也是占磁盤空間

? ? ?②索引提高了查詢速度,但也降低更新表的速度,每次更新段,都要調整索引信息

? 注:數據變化之后索引結構也是需要發生改變, 所以添加索引也是需要有規則的.

3.索引的原理

? ? ? 索引類似于書的目錄,通過目錄可以快速的定位到數據的物理位置.

4.什么是索引

? ? ? 索引是幫助mysql高效獲取數據的排好序的快速查找的數據結構

? ? ? 在向數據庫中插入數據時,mysql自動會為主鍵創建一個索引樹,通過主鍵查詢時,先在主鍵索引樹上查詢,可以提高查詢效率,找到主鍵后,就可以快速定位到數據.

5.索引分類

①主鍵索引

? ?一個表中只能有一個主鍵, primary key

創建主鍵索引:

ALTER TABLE 表名 add PRIMARY KEY 表名(列名);

//設定為主鍵后數據庫會自動建立索引

刪除主鍵索引:

ALTER TABLE 表名 drop PRIMARY KEY ;

②單值索引

一個索引只包含單個列,一個表可以有多個單列索引

創建單值索引 :

CREATE INDEX 索引名 ON 表名(列名);

刪除索引:

DROP INDEX 索引名;

③組合索引(符合索引)

一個索引中可以包含多個列(建議)

創建復合索引 :

CREATE INDEX 索引名 ON 表名(列1,列2...);

刪除索引:

DROP INDEX 索引名 ON 表名;

組合索引最左前綴原則

使用組合索引時,需要在查詢條件中用到最左側列,否則索引失效.

eg:? ? ??

? ? ? ?列如表中有a,b,c3列,為a,b兩列創建組合索引,那么在使用時需要滿足最左 側索引原則.在使用組合索引的列作為條件時,必須要出現最左側列為條件,否則 組合索引不生效.

? ? ? ? ? 列如? ?select * from table where a=’’and b=’’? ? ?索引生效

? ? ? ? ? ? ? ? ? ? select * from table where b=’’and a=’’? ? ?索引生效

? ? ? ? ? ? ? ? ? ? select * from table where a=’’and c=’’? ? ?索引生效

? ? ? ? ? ? ? ? ? ? select * from table where b=’’and c=’’? ? ?索引不生效

④全文索引

? 在mysql中 like 模糊查詢導致索引失效,這時就可以使用全文索引來解決這個問題

全局索引使用:

CREATE FULLTEXT INDEX 索引名 ON 表名(字段名)WITH PARSER ngram;

SELECT 結果 FROM 表名 WHEREMATCH(列名)AGAINST(‘搜索詞')

查看索引:

SHOWINDEX FROM 表名;

6.索引創建原則

①哪些情況建議添加索引

? ?主鍵自動建立唯一索引

? ?作為查詢條件的字段應該創建索引(where 后面的語句)

? ?盡量使用聯合索引,減少單列索引

? ?針對于數據量較大,且查詢比較頻繁的表建立索引。

? ?查詢中排序的字段,分組中的字段,若通過索引去訪問將大大提高排序速

②哪些情況不應該加索引

? ? 表記錄太少

? ? 經常增刪改的表

? ? Where條件里用不到的字段不創建索引

? ? 數據重復且分布平均的表字段,因此應該只為最經常查詢和最經常排序的數 據列建立索引,某個數據列包含許多重復的內容,建立索引沒有太大實際效果

7.索引數據結構

mysql中索引數據結構使用的是B+樹

B+樹優點:

? ? ?一個節點中可以存儲多個數據,

? ? ?非葉子節點中不存儲表數據,只存儲索引數據,這樣一個節點中就可以存儲更多索引數據

? ? ?數據都存儲在葉子節點, 通過主鍵查詢,找到了索引,就找打到了數據

? ? ?葉子節點之間也是建立了連接, 所以非常適合范圍查詢

8.回表查詢

? ? ? ?在使用非主鍵索引查詢數據時,例如通過學號查詢數據,先在學號索引樹查詢,查詢到之后,還需要去主鍵索引樹查詢,因為數據都掛載在主鍵索引樹下,需要回表二次查詢,實際開發中,盡量減少回表查詢.

四.數據庫事務

? ? ? ?數據庫事務是數據對一次連接過程發送的多條sql執行進行管理,這多條sql要么都執行,要么都不執行.

? ? ? ?當一次連接過程中,所有操作都執行沒有問題時,向數據庫提交事務,數據庫才真正的執行sql.

eg:

? ? ? 轉賬: 對用戶來說轉賬是一個整體的操作:包含減錢和加錢, 必須要保證這多條sql要么都成功執行要么都失敗

sql1 從A賬戶減錢

//異常

sql2 向B賬戶加錢

提交事務

1.事務特性

? ? ? ?事務是必須滿足4個條件:原子性(Atomicity,或稱不可 分割性)、一致性(Consistency)、隔離性(Isolation,又稱獨立性)、持久性(Durability)。

? ? ? 原子性: 不可拆分 要么都執行,要么都不執行

? ? ? 持久性: 事務一旦提交后,不能撤銷,保證數據持久保存

? ? ? 隔離性: 數據庫運行多個事務同時對數據庫數據進行操作,操作時給我們提供了4種隔離級別進行選擇, 保證操作之間相互之間的關系

? ? ? 一致性: 數據完整性 經過多次轉賬操作后, 最終的結果需要和我們預期結果是一致

2.事務隔離級別

查看隔離級別
SELECT @@session.transaction_isolation,@@transaction_isolation

①讀 未提交:

? ? ? 一個事務讀到另一個事務還未提交的數據,這會帶來臟讀幻讀不可重復讀問題

SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

②讀 已提交:

? ? ? 一個事務只能讀到另一個事務提交后的數據,避免了臟讀,仍然存在不可以重復讀和幻讀問題

? ? ?不可重復讀問題: 在同 一個事務中,讀取相同的數據兩次,結果兩次結果不一樣

SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED

③可 重復讀:

? ? ? ?在同 一個事務中,讀取相同的數據兩次,結果兩次結果一樣

? ? ? ?可重復讀也稱為快照讀, 底層在第一次讀取的時候,進行拍照, 在同一個事物中,第二次讀的時候,直接讀取快照,解決不可重復讀問題,部分還存在幻讀問題

? ? 幻讀問題: 在同同一個事物中,查詢兩次,兩次的數量不一樣

? ? 可重復讀隔離級別 對于普通的查詢sql解決了幻讀問題,對于查詢語句后面添加了for update的語句,仍然存在幻讀問題

SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ

④串行化:

? ?一次只能允許一個事務 操作(多個事務對同一條數據) 可以解決以上問題,但是效率低

SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE

五.mysql中的鎖機制

1.全局鎖

鎖住整個數據庫, 只允許查詢操作

一般在備份數據庫時使用.

添加全局鎖:

FLUSH TABLES WITH READ LOCK

釋放全局鎖:

UNLOCK TABLES;

2.表鎖

? ? 鎖著整表, myisam引擎默認只支持表鎖, 一次只允許一個對該表事務進行操作.

3.行級鎖

行鎖 : 精確的鎖定操作的那一行數據

? ? ? ? ?例如 update test set age = 20 where id = 1; 鎖住id=1的這條記錄

間隙鎖: 鎖定一個區間

? ? ? ? ?例如 update test set age = 20 where id >1 and id < 5 鎖定了id=2,3,4的記錄

行鎖又可以分為:

共享鎖:

一般給查詢語句添加,

當一條查詢語句添加了共享鎖后, 允許其他事同時務讀, 但是不允許其他事務為該條記錄加排他鎖.

排他鎖:

新增,修改,刪除默認加排他鎖

查詢語句也可以加排他鎖, select ..... for update

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

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

相關文章

【架構】Docker簡單認知構建

作為一個之前從來沒有接觸過Docker的倒霉蛋&#xff0c;想了解學習一下Docker 搜了CSDN和RUNOOB&#xff0c;得到的描述如下&#xff1a; Docker 是一個開源的應用容器引擎&#xff0c;基于 Go 語言 并遵從 Apache2.0 協議開源。 Docker 可以讓開發者打包他們的應用以及依賴包…

C++ std::list概念與使用案例

C std::list 概念詳解 std::list 是 C 標準模板庫&#xff08;STL&#xff09;中的一個雙向鏈表容器。與 vector 和 array 不同&#xff0c;它不保證元素在內存中連續存儲&#xff0c;而是通過指針將各個元素連接起來。 核心特性 雙向鏈表結構&#xff1a; 每個元素包含指向前驅…

從0到1學Pandas(六):Pandas 與數據庫交互

目錄一、數據庫基礎操作1.1 連接數據庫1.2 執行 SQL 查詢1.3 創建與修改表結構二、數據導入導出2.1 從數據庫讀取數據2.2 將數據寫入數據庫2.3 大數據量處理三、數據庫事務處理3.1 事務概念與實現3.2 批量數據更新3.3 錯誤處理與回滾四、數據庫性能優化4.1 查詢性能優化4.2 連接…

GitHub 趨勢日報 (2025年07月26日)

&#x1f4ca; 由 TrendForge 系統生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日報中的項目描述已自動翻譯為中文 &#x1f4c8; 今日獲星趨勢圖 今日獲星趨勢圖602Qwen3-Coder573neko527hrms275BillionMail153Win11Debloat115hyperswitch57data…

機器人仿真(2)Ubuntu24.04下RTX5090配置IsaacSim與IsaacLab

目錄 一、前言二、電腦配置三、配置步驟3.1 創建Conda環境3.2 安裝PyTorch3.3 安裝Isaac Sim3.4 安裝Isaac Lab 四、總結 一、前言 博主自從去年開始就一直在關注Isaac Lab和Isaac Sim&#xff0c;但是一直以來由于手頭設備只有4060&#xff0c;甚至沒有達到最低配置16GB顯存要…

DaVinci Resolve 19.0(達芬奇)軟件安裝包下載及詳細安裝教程|附帶安裝文件

[軟件名稱]&#xff1a;ArcGIS [軟件大小]&#xff1a;2.99 GB [系統要求]&#xff1a;支持Win7及更高版本 [下載通道]: 迅雷網盤 [下載鏈接]:高速下載地址 https://pan.xunlei.com/s/VOW9nw-JV99A_7f_5hhpgqO2A1?pwdbufh# ??:先用手機下載迅雷網盤保存到手機中&#xff0c…

Java學習第八十一部分——Shiro

目錄 &#x1f4eb; 一、前言提要簡介 &#x1f6e1;? 二、核心功能介紹 ?? 三、核心架構組件 ? 四、與Java的關系 ?? 五、與Spring Security對比 &#x1f9e9; 六、典型應用場景 &#x1f48e; 七、總結歸納概述 &#x1f4eb; 一、前言提要簡介 Apache Shiro 是…

虛擬機ubuntu20.04共享安裝文件夾

ubuntu20.04共享安裝文件夾 4.5 共享安裝文件夾 將Windows存放安裝文件的文件夾共享給虛擬機&#xff0c;如下圖操作&#xff1a;如果是在ubuntu20.04中&#xff0c;還需要以下的操作&#xff1a; sudo mkdir /mnt/hgfs 此命令無效 sudo echo ‘vmhgfs-fuse /mnt/hgfs fu…

如何查看電腦后門IP和流量?

你是否也有以下經歷&#xff1f;深夜&#xff0c;你的電腦風扇突然狂轉&#xff0c;屏幕卻一片寂靜&#xff1b;每月流量莫名超標&#xff0c;賬單高得離譜&#xff1b;鼠標偶爾不聽使喚…這些可能不是電腦“鬧脾氣”&#xff0c;如何一探究竟&#xff1f; 想象一下&#xff1a…

分類預測 | MATLAB基于四種先進的優化策略改進蜣螂優化算法(IDBO)的SVM多分類預測

分類預測 | MATLAB基于四種先進的優化策略改進蜣螂優化算法(IDBO)的SVM多分類預測 目錄分類預測 | MATLAB基于四種先進的優化策略改進蜣螂優化算法(IDBO)的SVM多分類預測分類效果基本介紹多策略量子自適應螺旋搜索算法研究摘要1. 引言1.1 研究背景1.2 研究意義1.3 研究目標2. 文…

Android 修改系統時間源碼閱讀

鏈接&#xff1a;XRefAndroid - Support Android 16.0 & OpenHarmony 5.0 (AndroidXRef/AospXRef) 這里看的Android 10的代碼&#xff0c;選中Android 10&#xff0c;勾選所有工程&#xff0c;搜索DateTimeSettings?&#xff1a; 看到showTimePicker應該是顯示一個設置時…

關于自定義域和 GitHub Pages(Windows)

GitHub Pages 支持使用自定義域,或將站點 URL 的根目錄從默認值(例如 )更改為您擁有的任何域,比如octocat.github.io。 誰可以使用此功能? GitHub Pages 在公共存儲庫中提供 GitHub Free 和 GitHub Free for organizations,在公共和私有存儲庫中提供 GitHub Pro、GitHub …

自動駕駛領域中的Python機器學習

數據預處理與特征工程 在自動駕駛系統中&#xff0c;數據是驅動決策的核心。從傳感器&#xff08;如攝像頭、激光雷達、毫米波雷達&#xff09;收集的原始數據通常包含噪聲、缺失值和異常值&#xff0c;需要進行系統的預處理。Python的pandas庫提供了強大的數據處理能力&#x…

PROFINET轉CAN通訊協議轉換速通汽車制造

在汽車系統領域之外&#xff0c;控制器局域網&#xff08;CAN&#xff09;總線技術亦廣泛應用于多種工業環境。其固有的穩健性、可靠性與靈活性&#xff0c;使其成為工業自動化及控制系統中設備間通信的理想選擇。CAN 總線技術在工業應用中的關鍵領域包括機器控制、傳感器網絡以…

影刀RPA_小紅書筆記批量采集_源碼解讀

一、項目簡介本項目是一個基于影刀RPA的小紅書筆記批量采集工具&#xff0c;能夠通過兩種模式獲取小紅書平臺的軟文數據&#xff1a;搜索內容抓取和自定義鏈接抓取。工具使用Chrome瀏覽器自動化技術&#xff0c;實現了從網頁數據采集、解析到Excel導出的完整流程。支持獲取筆記…

以使命為帆,結業是重新出發的號角

站在私教班結業典禮的講臺上&#xff0c;望著眼前一張張閃爍著力量的面孔&#xff0c;我心中始終縈繞著一個信念&#xff1a;所有的相遇&#xff0c;都是為了共同奔赴一件更有意義的事。今天不是終點&#xff0c;而是 “使命的啟程”—— 我們因不甘而相聚&#xff1a;不甘心行…

java測試題(下)

1. Spring 核心概念1.1 如何理解 Spring DI&#xff1f;DI&#xff08;依賴注入&#xff09; 是 IoC&#xff08;控制反轉&#xff09; 的具體實現方式&#xff0c;由 Spring 容器在運行時通過以下方式自動注入依賴&#xff1a;構造器注入&#xff08;推薦&#xff09;Setter 注…

LC振蕩Multisim仿真

電路圖&#xff1a;說明&#xff1a;點擊仿真后&#xff0c;先打開S1&#xff0c;可以看到C1的充電曲線。當電容充滿電后&#xff0c;關閉S1&#xff0c;打開S2&#xff0c;這時候&#xff0c;C2電容會快速獲得C1一半的電量。如果沒有L&#xff0c;曲線會變得很陡。如果只加入電…

五、Web開發

文章目錄1. SpringMVC自動配置概覽2. 簡單功能分析2.1 靜態資源訪問2.1.1 靜態資源目錄2.1.2 靜態資源訪問前綴2.1.3 webjar2.2 歡迎頁支持2.3 自定義 Favicon2.4 靜態資源配置原理2.4.1 配置類只有一個有參構造器2.4.2 資源處理的默認規則2.4.3 歡迎頁的處理規則2.4.4 favicon…

Mysql 二進制安裝常見問題

1. mysql: error while loading shared libraries: libncurses.so.5: cannot open shared object file: No such file or directory在centos9中升級了libncurses.so的版本為libncurses.so.6&#xff0c;所以找不到libncurses.so.5需要使用軟連接指向libncurses.so.6ln -s /lib6…