您好,登錄后才能下訂單哦!
這篇文章主要介紹了mysql事務與存儲引擎實例分析的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇mysql事務與存儲引擎實例分析文章都會有所收獲,下面我們一起來看看吧。
(1)事務是一種機制、一個操作序列,包含了一組數據庫操作命令,并且把所有的命令作為一個整體一起向系統提交或撤銷操作請求,即這組數據庫命令要么都執行,要么都不執行。
(2)事務是一個不可分割的工作邏輯單元,在數據庫系統上執行并發操作時,事務是最小的控制單元。
(3)事務適用于多用戶同時操作的數據庫系統的場景,如銀行、保險公司及證券交易系統等等。 (4)事務通過事務的整體性以保證數據的一致性。
注:ACID,是指在可靠數據庫管理系統 (DBMS) 中,事務 (transaction) 應該具有的四個特性:原子性 (Atomicity) 、一致性 (Consistency )、隔離性 (Isolation) 、持久性 (Durability) 。這是可靠數據庫所應具備的幾個特性。
(1)原子性:指事務是一個不可再分割的工作單位,事務中的操作要么都發生,要么都不發生。 a、事務是一個完整的操作,事務的各元素是不可分的。
b、事務中的所有元素必須作為一個整體提交或回滾。
c、如果事務中的任何元素失敗,則整個事務將失敗。
(2)一致性:指在事務開始之前和事務結束以后,數據庫的完整性約束沒有被破壞。
a、當事務完成時,數據必須處于一致狀態。
b、在事務開始前,數據庫中存儲的數據處于一致狀態。
c、在正在進行的事務中,數據可能處于不一致的狀態。
d、當事務成功完成時,數據必須再次回到已知的一致狀態。
(3)隔離性:指在并發環境中,當不同的事務同時操縱相同的數據時,每個事務都有各自的完整數據空間。 對數據進行修改的所有并發事務是彼此隔離的,表明事務必須是獨立的,它不應以任何方式依賴于或影響其他事務。 修改數據的事務可在另一個使用相同數據的事務開始之前訪問這些數據,或者在另一-個使用相同數據的事務結束之后訪問這些數據。
(4)持久性:在事務完成以后,該事務對數據庫所作的更改便持久的保存在數據庫之中,并不會被回滾。
a、指不管系統是否發生故障,事務處理的結果都是永久的。
b、一旦事務被提交,事務的效果會被永久地保留在數據庫中。
總結:在事務管理中,原子性是基礎,隔離性是手段,一致性是目的,持久性是結果。
(1)、臟讀:一個事務讀取了另一個事務未提交的數據,而這個數據是有可能回滾的。
(2)、不可重復讀:一個事務內兩個相同的查詢卻返回了不同數據。這是由于查詢時系統中其他事務修改的提交而引起的。
(3)、幻讀:一個事務對一個表中的數據進行了修改,這種修改涉及到表中的全部數據行。同時,另一個事務也修改這個表中的數據,這種修改是向表中插入一行新數據。 那么,操作前一個事務的用戶會發現表中還有沒有修改的數據行,就好象發生了幻覺一樣。
(4)、丟失更新:兩個事務同時讀取同一條記錄,A先修改記錄,B也修改記錄 (B不知道A修改過),B提交數據后B的修改結果覆蓋了A的修改結果。
(1) 、read uncommitted:讀取尚未提交的數據,不解決臟讀
(2)、 read committed:讀取己經提交的數據,可以解決臟讀
(3)、 repeatable read:重讀讀取,可以解決臟讀和不可重復讀-------------mysql默認
(4)、 serializable:串行化,可以解決臟讀不可重復讀和虛讀----------------相當于鎖表 注:mysql 默認的事務處理級別是 repeatable read,而 Oracle 和 SQL Server 是 read committed
show global variables like '%isolation%'; 或 select @@global.tx_isolation;
show session variables like '%isolation%'; SELECT @@session.tx_isolation; SELECT @@tx_isolation;
set global transaction isolation level read committed; show global variables like '%isolation%';
set session transaction isolation level read committed; show session variables like '%isolation%';
begin; 開啟事務
commit; 提交事務,使已對數據庫進行的所有修改變為永久性的
rollback; 回滾事務,撤銷正在進行的所有未提交的修改
savepoint s1; 建立回滾點,s1為回滾點名稱,一個事務中可以有多個
rollback to s1; 回滾到s1回滾點
①、創建表
create database school; use school; create table Fmoney( id int(10) primary key not null, name varchar(20), money decimal(5,2)); insert into Fmoney values ('1','srs1','100'); insert into Fmoney values ('2','srs2','200'); select * from Fmoney;
②、測試提交事務
begin; update Fmoney set money= money - 100 where name='srs2'; commit; quit mysql -u root -p use school; select * from Fmoney;
③、測試回滾事務
begin; update Fmoney set money= money + 100 where name='srs2'; select * from Fmoney; rollback; select * from Fmoney;
④、測試多點回滾
begin; update Fmoney set money= money + 100 where name='srs2'; select * from Fmoney; savepoint a; update Fmoney set money= money + 100 where name='srs1'; select * from Fmoney; savepoint b; insert into Fmoney values ('3','srs3','300'); select * from Fmoney; rollback to b; select * from Fmoney;
SET AUTOCOMMIT=0; #禁止自動提交 SET AUTOCOMMIT=1; #開啟自動提交,Mysql默認為1 SHOW VARIABLES LIKE 'AUTOCOMMIT'; #查看Mysql中的AUTOCOMMIT值
如果沒有開啟自動提交,當前會話連接的mysql的所有操作都會當成一個事務直到你輸入rollback|commit;當前事務才算結束。當前事務結束前新的mysql連接時無法讀取到任何當前會話的操作結果。
如果開起了自動提交,mysql會把每個sql語句當成一個事務,然后自動的commit。
當然無論開啟與否,begin; commit|rollback; 都是獨立的事務。
(1)MySQL中的數據用各種不同的技術存儲在文件中,每一種技術都使用不同的存儲機制、索引技巧、鎖定水平,并最終提供不同的功能和能力,這些不同的技術以及配套的功能在MySQL中稱為存儲引擎。
(2)存儲引擎是MySQL將數據存儲在文件系統中的存儲方式或者存儲格式
(3)MySQL 常用的存儲引擎有: a、MylSAM b、InnoDB
(4)MySQL數據庫中的組件,負責執行實際的數據I/O操作
(5)MySQL系統中,存儲引擎處于文件系統之.上,在數據保存到數據文件之前會傳輸到存儲引擎,之后按照各個存儲引擎的存儲格式進行存儲。
show engines;
(1)方法一:直接查看 show table status from 庫名 where name='表名'\G; 例: show table status from school where name='class'\G; (2)方法二:進入數據庫查看 use 庫名; show create table 表名\G; 例: use school; show create table class\G;
(1) 方法一:通過 alter table 修改 use 庫名; alter table 表名 engine=MyISAM; 例: use school; alter table class engine=MYISAM; (2)方法二:通過修改 /etc/my.cnf 配置文件,指定默認存儲引擎并重啟服務 注意:此方法只對修改了配置文件并重啟mysql服務后新創建的表有效,已經存在的表不會有變更。 vim /etc/my.cnf ...... [mysqld] ...... default-storage-engine=INNODB systemctl restart mysql.service (3)方法三:通過 create table 創建表時指定存儲引擎 use 庫名; create table 表名(字段1 數據類型,...) engine=MyISAM; 例: mysql -u root -p use school; create table test7(id int(10) not null,name varchar(20) not null) engine=MyISAM;
關于“mysql事務與存儲引擎實例分析”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“mysql事務與存儲引擎實例分析”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。