<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
事務是一組操作的集合,它是一個不可分割的工作單位,事務會把所有的操作作為一個整體一起向系統提交或復原操作請求,即這些操作要麼同時成功,要麼同時失敗。
就比如: 張三給李四轉賬1000塊錢,張三銀行賬戶的錢減少1000,而李四銀行賬戶的錢要增加1000。
這一組操作就必須在一個事務的範圍內,要麼都成功,要麼都失敗。
正常情況: 轉賬這個操作, 需要分為以下這麼三步來完成 , 三步完成之後, 張三減少1000, 而李四 增加1000, 轉賬成功 :
異常情況: 轉賬這個操作, 也是分為以下這麼三步來完成 , 在執行第三步是報錯了, 這樣就導致張三減少1000塊錢, 而李四的金額沒變, 這樣就造成了資料的不一致, 就出現問題了。
為了解決上述的問題,就需要通過資料的事務來完成,我們只需要在業務邏輯執行之前開啟事務,執行完畢後提交事務。如果執行過程中報錯,則回滾事務,把資料恢復到事務開始之前的狀態。
注意: 預設MySQL的事務是自動提交的,也就是說,當執行完一條DML語句時,MySQL會立即隱式的提交事務
資料庫指令碼:
drop table if exists account; create table account ( id int primary key AUTO_INCREMENT comment 'ID', name varchar(10) comment '姓名', money double(10, 2) comment '餘額' ) comment '賬戶表'; insert into account(name, money) VALUES ('張三', 2000), ('李四', 2000);
1、測試正常情況
-- 1. 查詢張三餘額 select * from account where name = '張三'; -- 2. 張三的餘額減少1000 update account set money = money - 1000 where name = '張三'; -- 3. 李四的餘額增加1000 update account set money = money + 1000 where name = '李四';
測試完畢之後檢查資料的狀態, 可以看到資料操作前後是一致的
2、 測試異常情況
-- 1. 查詢張三餘額 select * from account where name = '張三'; -- 2. 張三的餘額減少1000 update account set money = money - 1000 where name = '張三'; 出錯了.... -- 3. 李四的餘額增加1000 update account set money = money + 1000 where name = '李四'
我們把資料都恢復到2000, 然後再次一次性執行上述的SQL語句(出錯了.... 這句話不符合SQL語法,執行就會報錯),檢查最終的資料情況, 發現資料在操作前後不一致了
1、檢視/設定事務提交方式
SELECT @@autocommit ; SET @@autocommit = 0 ;
2、 提交事務
COMMIT;
3、回滾事務
ROLLBACK;
注意:
上述的這種方式,我們是修改了事務的自動提交行為, 把預設的自動提交修改為了手動提交, 此時我們執行的DML語句都不會提交, 需要手動的執行commit進行提交。
1、開啟事務
START TRANSACTION 或 BEGIN ;
2、提交事務
COMMIT;
3、回滾事務
ROLLBACK;
轉賬案例:
-- 開啟事務 start transaction -- 1. 查詢張三餘額 select * from account where name = '張三'; -- 2. 張三的餘額減少1000 update account set money = money - 1000 where name = '張三'; -- 3. 李四的餘額增加1000 update account set money = money + 1000 where name = '李四'; -- 如果正常執行完畢, 則提交事務 commit; -- 如果執行過程中報錯, 則回滾事務 -- rollback;
原子性(Atomicity):事務是不可分割的最小操作單元,要麼全部成功,要麼全部失敗。
一致性(Consistency):事務完成時,必須使所有的資料都保持一致狀態。
隔離性(Isolation):資料庫系統提供的隔離機制,保證事務在不受外部並行操作影響的獨立環境下執行。
永續性(Durability):事務一旦提交或回滾,它對資料庫中的資料的改變就是永久的。
上述就是事務的四大特性,簡稱ACID。
1、贓讀:一個事務讀到另外一個事務還沒有提交的資料。
2、不可重複讀:一個事務先後讀取同一條記錄,但兩次讀取的資料不同,稱之為不可重複讀。
3、幻讀:一個事務按照條件查詢資料時,沒有對應的資料行,但是在插入資料時,又發現這行資料已經存在,好像出現了 "幻影“。
為了解決並行事務所引發的問題,在資料庫中引入了事務隔離級別。主要有以下幾種:
1、檢視事務隔離級別
SELECT @@TRANSACTION_ISOLATION; 1
2、設定事務隔離級別
SET [ SESSION | GLOBAL ] TRANSACTION ISOLATION LEVEL { READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE }
注意:事務隔離級別越高,資料越安全,但是效能越低
到此這篇關於MySQL基礎入門教學之事務的文章就介紹到這了,更多相關MySQL基礎事務內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45