mysql資料庫日常歸納

2021-10-07 10:45:21 字數 2461 閱讀 3668

1.什麼是事務

簡單來說事務是資料庫併發控制的基本單位,是使用者定義的乙個操作序列。

2.事務的4個特性(acid)

a:原子性。乙個事務上的所有操作,要麼全部執行,要麼全部不執行,他不會在中途結束,事務執行過程中發生錯誤,資料會被恢復到事務執行之前的狀態,就好像這個事務沒有發生過一樣。

c:一致性。無論是在事務執行前,還是事務執行完成以後,資料庫的完整性都不會被破壞,這要求我們在寫入資料時,要完全符合預設約束,觸發器和級聯滾動。

i:隔離性,資料庫允許多個事務 併發對資料進行讀寫操作,隔離性則保證了多個事務併發執行過程中不會由於交叉操作導致資料錯誤。

d:永久性,在事務執行完成後,對資料的修改是永久的。

3.事務隔離的級別

(1)讀未提交

事務隔離的最低級別,允許讀取未提交的資料來源。 會導致發生髒讀,可重複讀,幻讀。

(2)讀提交

大多數資料庫的預設級別,但是不是mysql 的預設級別,

允許對提交的資料進行讀取。仍有幻讀和不可重複讀的風險。

(3)可重複讀

mysql的預設隔離級別

對同一欄位的多次讀取結果都是一樣的,可以防止髒讀和不可重複讀,但是仍然有可能出現幻讀。

(4)序列化

事務隔離的最高端別

所有事物依次逐個執行,這樣事務之間就完全不可能產生干擾,防止了髒讀,幻讀,不可重複讀。

4什麼是髒讀、幻讀、不可重複讀。

髒讀:讀取到了事務回滾前的資料,事務b執行中對資料x進行了修改,但是未提交,此時事務a也讀取了資料x。然後事務b回滾。事務a就產生了髒讀。

不可重複讀:在乙個事務的兩次查詢中資料不一致,可能是在兩次查詢的間隔中插入了乙個事務b對資料進行了修改。

幻讀:乙個事務的兩次查詢中,筆數不一致,可能是在乙個事務a查詢後,另乙個事務b插入了新的資料,導致事務a在之後的查詢中發現有一些資料的之前沒有的,就好像發生幻覺一樣。

5.innodb和myisam引擎的區別

(1)innodb支援事務,外來鍵,採用行鎖(預設)和表鎖,innodb不儲存表的具體行數,myisam在沒有使用where的情況下設定了乙個變數儲存表的行數。

(2)delete表時,innodb逐行刪除,myisam直接刪除整張表然後重建。

(3)innodb的儲存檔案為.frm(用於儲存**定義)、ibd(用於儲存資料檔案)。myisam的儲存檔案為frm(用於儲存**定義)、myd(用於儲存資料檔案)、myi(用於存放索引檔案)。

(4)大容量的資料集時趨向於選擇innodb。因為它支援事務處理和故障的恢復。innodb可以利用資料日誌來進行資料的恢復。主鍵的查詢在innodb也是比較快的。大批量的插入語句時(這裡是insert語句)在myiasm引擎中執行的比較的快。

6.什麼是索引

答:索引是對資料庫中一列或者多列的值進行排序的結構,是幫助mysql高效獲得資料的資料結構。

7.說一說drop、delete和truncate的區別

(1)drop操作會刪除整張表,而且操作不會 計入日誌,也就意味著刪除之後資料無法恢復。

(2)delete和truncate都只是刪除表中的資料,delete的刪除操作會計入日誌,刪除後資料可以恢復,truncate刪除操作不會計入日誌,資料無法恢復。

8.mysql 的幾種連線方式

內連線(inner join)結合兩張表的記錄返回與關聯字段相符的記錄,也就是返回兩張表的交集。

左連線(left join)返回左表所有資料和右表的有關資料。

右連線 與左連線相反

9.表鎖和行鎖

(1)表鎖也分為共享鎖(讀鎖)和排它鎖(寫鎖)

共享鎖:事務a多資料x加上共享鎖後,其他事務只能隊資料x新增共享鎖,不能新增其他鎖,新增了共享鎖的事務只能對資料進行讀操作,但是不能修改資料。

拍他鎖:事務a對資料x新增排他鎖後,其他事務不能給資料x新增任何鎖,新增了排他鎖的事務可以對資料進行讀寫操作。

10.一張表有id自增主鍵,當insert了17條記錄之後,刪除了第15,16,17條記錄,再把mysql重啟,再insert一條記錄,這條記錄的id是18還是15 ?

innodb引擎:如果不重啟資料庫id為18,重啟資料庫後id為15,因為innodb引擎會把自增主鍵的最大id存放在記憶體中,重啟資料庫後,資料丟失。

myisam引擎:id為18,因為myisam引擎會把最大自增主鍵的id放在資料檔案裡。

11.樂觀鎖和悲觀鎖

樂觀鎖:正如其名,它在運算元據庫的時候,想法很樂觀,認為本次操作不會發生衝突,所以在運算元據時不會加鎖。到最後更新資料時在判斷剛才是否產生衝突。

具體實現:在表中的資料進行操作時給資料表加乙個version欄位,每操作一次version的值加一。對資料進行操作時,先判斷此刻的version值與剛剛查詢出的version值是否相等,如果相等,就證明在這段期間沒有其它程式對資料操作,可以執行更新,反之,則不更新。

悲觀鎖:總是假設最壞的情況,認為這次操作肯定會產生衝突,所以會給沒個操作加鎖,別人只能等待,等我釋放鎖以後,別人才能操作,行鎖,表鎖,讀鎖,寫鎖都是這種機制。

Mysql資料庫常用操作歸納

mysql資料庫是乙個十分輕便的資料庫管理系統,相比大型的資料庫管理系統如oracle,mysql顯得更加的輕便靈活,開發速度快,更適用於中小型資料的儲存與架構。從版本5以後,陸續支援了游標 觸發器 事務 儲存過程等高階應用,這也給mysql的易用性和企業服務的發展新增了重要的砝碼。資料庫的基礎很少...

日常 MySQL資料庫持久連線

2018年5月18日 記錄 資料庫持久連線 1.持久的資料庫連線是指在指令碼結束執行時不關閉的連線。當收到乙個持久連線的請求時。php 將檢查是否已經存在乙個 前面已經開啟的 相同的持久連線。如果存在,將直接使用這個連線 如果不存在,則建立乙個新的連線。所謂 相同 的連線是指用相同的使用者名稱和密碼...

mysql資料庫效能資料 MYSQL資料庫效能優化

1.選取最適用的字段屬性 表中字段的寬度設得盡可能小 char 的上限為 255 位元組 固定占用空間 varchar 的上限 65535 位元組 實際占用空間 text 的上限為 65535。盡量把字段設定為 not null,執行查詢的時候,資料庫不用去比較 null 值。2.使用連線 join...