mysql事務操作
mysql事務的四大特性
mysql事務隔離級別
部落格說明
事務是乙個整體,由一條或者多條sql 語句組成,這些sql語句要麼都執行成功,要麼都執行失敗,只要有 一條sql出現異常,整個操作就會回滾,整個業務執行失敗
重點:mysql預設開啟自動事務!!
比如: 銀行的轉賬業務,張三給李四轉賬500元, 至少要操作兩次資料庫, 張三 - 500, 李四 + 500,這中間任何一步出現問題,整個操作就必須全部回滾, 這樣才能保證使用者和銀行都沒有損失.即在事務執行的過程中發生了某種故障,事務不能繼續執行,系統將事務中對資料庫的所有已完成 的操作全部撤銷,滾回到事務開始時的狀態。(在提交之前執行)
功能語句
開啟事務
start transaction; 或者 begin;
提交事務
commit;
回滾事務
rollback;
在命令列中登入mysql後,檢視autocommit狀態
狀態show variables like
'autocommit'
;
內容on
自動提交(開啟)
off手動提交(關閉)
特性含義
原子性每乙個事務都是乙個整體,不可拆分事務中所有的sql要麼都執行成功,要麼都失敗
一致性事務在執行前資料庫的狀態 與執行後資料庫狀態保持一致,比如轉賬前兩人總金額是2000,轉賬後總金額也是2000
隔離性事務與事務之間不應該相互影響,執行時要保持隔離狀態
永續性一旦事務執行成功,對資料庫的修改的持久的(永久),就算關機資料也是要儲存下來
了解隔離級別之前,要了解為什麼需要隔離級別
資料併發訪問: 乙個資料庫可能擁有多個訪問客戶端,這些客戶端都可以併發方式訪問資料庫. 資料庫的相同資料可能被多個事務同時訪問
,如果不採取隔離措施,就會導致各種問題,破壞資料的完整性事務在操作時的理想狀態: 所有的事務之間保持隔離,互不影響。併發訪問的問題因為併發操作,多個使用者同時訪問 同乙個 資料。可能引發併發訪問的問題
說明髒讀
乙個事務讀取到了另乙個事務中尚未提交的資料
不可重複讀
乙個事務中,兩次讀取的資料不一致
幻讀乙個事務中,一次查詢的結果無法支撐後續的業務操作
安全級別:1
read uncommitted:讀未提交
可以防止的問題:不能解決任何併發訪問會產生的問題
安全級別:2
read committed:讀已提交(oracle預設的隔離級別)
可以防止的問題:髒讀
安全級別:3
repeatable read:可重複讀(mysql預設的隔離級別)
可以防止的問題:髒讀、不可重複讀
安全級別:4
serializable:序列化
可以防止的問題:髒讀、不可重複讀、幻讀
注意:隔離級別從小到大,安全性越來越高,但是效率越來越低,需根據不同的情況選擇對應的級別
檢視隔離級別:
設定隔離級別:select @@tx_isolation
;
sqlyog:-- 格式:set global transaction isolation level 級別名稱;
-- 級別名稱:
-- read uncommitted 讀未提交
-- read committed 讀已提交
-- repeatable read 可重複讀
-- serializable 序列化
setglobal
transaction
isolation
level
repeatable
read
;
修改完隔離級別後,需要重新啟動乙個新鏈結或重新啟動sqlyog
mysql命令列(管理員身份執行):
修改完隔離級別後,需要重新開啟命令列
mysql第六章 第六章 mysql日誌
第六章 mysql日誌 一 錯誤日誌 錯誤日誌的預設存放路徑是 mysql 存放資料的地方 hostname.err 1.修改錯誤日誌存放路徑 mysqld log error data mysql mysql.log 2.檢視配置命令 show variables like log error 3...
Mysql學習 第六章 萬用字元
百分號 萬用字元 表示任何字元出現任意次數 select prod id,prod name from products where prod name like fish 在執行這條子句時,將檢索任意以fish 起頭的詞。告訴 dbms 接受 fish 之後的任意字元,不管它有多少字元。備註 萬用...
第六章 學習筆記
1.引數分為位置引數和關鍵字引數。def func positional para x,y,z passdef func keyword para kwd1 1,kwd2 4,kwd3 9 pass2.1 當有多個位置引數時,可以用乙個星號來收集引數,函式內使用這些位置引數時可以通過for 迴圈依次...