MySQL常見問題

2021-09-16 20:25:05 字數 1638 閱讀 5257

事務是指作為單個邏輯工作單元的一系列操作(一系列sql語句)。當多個事務併發地訪問資料庫時就會產生同時讀取和/或修改同一資料的情況。若對併發操作不加控制就可能會訪問和儲存不正確的資料(髒讀、非重複讀、幻像讀、丟失修改的異常情況),破壞資料庫的一致性。

「a向b支付50」

讀出a支付寶餘額(100)。

a支付寶扣錢操作(100-50)。

結果寫回a賬號(50)。

讀出b支付寶餘額(100)。

b支付寶做加法操作(100+50)。

結果寫回b支付寶(150)。

事務的四個特性:

原子性:事務必須是原子工作單位。對於資料的修改,要麼全部執行,要麼全部不執行。以上六個步驟,要麼都執行,要麼都不執行;

一致性:事務在完成時,所有的資料必須保持一致狀態。比如:a轉支付前(100)+b收款前(100)=a支付完成後(50)+b收款後(150);

隔離性:併發事務對資料的修改於其他併發事務對資料的修改是隔離的。事務檢視資料時資料所處的狀態,要麼是另一併發事務修改它之前的狀態,要麼是另一事務修改它之後的狀態,事務不會檢視中間狀態的資料。比如:在a向b轉賬的整個過程中,只要事務還沒有提交(commit),查詢a賬戶和b賬戶的時候,兩個賬戶裡面的錢的數量都不會有變化。

永續性:事務完成後,對系統的影響是永久的。一旦轉賬成功,變化就真實存在了。

mysql有三種鎖的級別:頁級、表級、行級。

表級鎖:開銷小,加鎖快;不會出現死鎖;鎖定粒度大,發生鎖衝突的概率最高,併發度最低。

行級鎖:開銷大,加鎖慢;會出現死鎖;鎖定粒度最小,發生鎖衝突的概率最低,併發度也最高。

頁面鎖:開銷和加鎖時間界於表鎖和行鎖之間;會出現死鎖;鎖定粒度界於表鎖和行鎖之間,併發度一般

死鎖就是兩個或多個事務在同乙個資源上相互占用,並且請求鎖死對方的資源。

避免死鎖的方法:乙個事物經量一次鎖定所用資源;表級鎖;併發訪問多個表時,以相同順序訪問。

索引就是對**一列或者多列進行排序的一種結構

索引型別:

主鍵索引(primary key,每張資料表只能存乙個主鍵);

唯一索引(unique key,可以保證記錄的唯一性);

普通索引(index);

全文索引(fulltext)。

最左字首(最左優先):where 子句使用最頻繁的一列放在最左邊

常見索引演算法:btree(用在》、<、>=等比較操作符),hash(用在=對等比較符)。且hash索引檢索比btree索引檢索效率高。

索引設計:適用於索引的列出現在where子句中的列;用短索引;不要過度使用索引。

優點:可以實現快速查詢;

缺點:降低更新表的速度;建立索引會占用磁碟空間的索引檔案。

髒讀:a事務讀取了b事務更新的資料,但是b回滾了,那麼a就是髒讀。

不可重複讀:a事務重複讀取同一資料多次,在a事務讀取的過程中,b事務對該資料進行更新並提交,導致a事務讀取的資料不一致。

幻讀:a事務對**進行整體優化(評等級),b事務在a事務優化過程中插入一行新的記錄,導致a事務完成後發現還有記錄沒有優化完成,就好像發生幻覺一樣。

客戶端伺服器和資料庫伺服器建立連線

資料庫程序拿到請求sql

解析並生成執行計畫並執行

讀書資料放入記憶體中並進行邏輯處理

傳送結果給客戶端伺服器

關閉連線,釋放資源

Mysql常見問題

1.安裝,推薦使用非安裝版.把解壓後的檔案拷貝到c盤根目錄下,並把總目錄改為mysql.然後進入windows命令 控制台,在c mysql bin下面執行mysqld nt install把它安裝為乙個服務,然後呼叫net start mysql啟動它,停止的命令是net stop mysql 想...

mysql常見問題

按照表中某一欄位排序,若該字段可能存在空值,公升序排列時空值排在最前面,降序排列是空值排在最後面。公升序排列時如果想讓空值排在最後面,可以 order by field1 is null,field1 asc 這麼寫。例如有個user表,按照 seq欄位排序。select from user ord...

Mysql常見問題

在idea中連線資料庫是丟擲the server time zone value is unrecogni錯誤 原因是因為使用了mysql connector j 6.x以上的版本,然後就報了時區的錯誤。解決辦法 配置url中新增servertimezone utc spring.datasourc...