婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > MySQL 事務概念與用法深入詳解

MySQL 事務概念與用法深入詳解

熱門標簽:怎么更改高德地圖標注 400電話到哪辦理優(yōu)惠 南寧外呼系統(tǒng)招商 鄭州網(wǎng)絡外呼系統(tǒng)價錢 云南大數(shù)據(jù)外呼系統(tǒng) 機器人打電銷電話 上海市三維地圖標注 電話機器人是電腦呼號嗎 博樂電銷機器人

本文實例講述了MySQL 事務概念與用法。分享給大家供大家參考,具體如下:

事務的概念

MySQL事務是一個或者多個的數(shù)據(jù)庫操作,要么全部執(zhí)行成功,要么全部失敗回滾。

事務是通過事務日志來實現(xiàn)的,事務日志包括:redo log和undo log。

事務的狀態(tài)

活動的(active)

事務對應的數(shù)據(jù)庫操作正在執(zhí)行過程中時,我們就說該事務處在活動的狀態(tài)。

部分提交的(partially committed)

當事務中的最后一個操作執(zhí)行完成,但由于操作都在內(nèi)存中執(zhí)行,所造成的影響并沒有刷新到磁盤時,我們就說該事務處在部分提交的狀態(tài)。

失敗的(failed)

當事務處在活動的或者部分提交的狀態(tài)時,可能遇到了某些錯誤(數(shù)據(jù)庫自身的錯誤、操作系統(tǒng)錯誤或者直接斷電等)而無法繼續(xù)執(zhí)行,或者人為的停止當前事務的執(zhí)行,我們就說該事務處在失敗的狀態(tài)。

中止的(aborted)

如果事務執(zhí)行了半截而變?yōu)槭〉臓顟B(tài),撤銷失敗事務對當前數(shù)據(jù)庫造成的影響,我們把這個撤銷的過程稱之為回滾。

當回滾操作執(zhí)行完畢時,也就是數(shù)據(jù)庫恢復到了執(zhí)行事務之前的狀態(tài),我們就說該事務處在了中止的狀態(tài)。

提交的(committed)

當一個處在部分提交的狀態(tài)的事務將修改過的數(shù)據(jù)都同步到磁盤上之后,我們就可以說該事務處在了提交的狀態(tài)。

從圖中大家也可以看出了,只有當事務處于提交的或者中止的狀態(tài)時,一個事務的生命周期才算是結束了。對于已經(jīng)提交的事務來說,該事務對數(shù)據(jù)庫所做的修改將永久生效,對于處于中止狀態(tài)的事務,該事務對數(shù)據(jù)庫所做的所有修改都會被回滾到?jīng)]執(zhí)行該事務之前的狀態(tài)。

事務的作用

事務主要是為了保證復雜數(shù)據(jù)庫操作數(shù)據(jù)的一致性,尤其是在并發(fā)訪問數(shù)據(jù)時。
MySQL 事務主要用于處理操作量大,復雜度高的數(shù)據(jù)。

事務的特點

原子性(Atomicity,又稱不可分割性)

事務的數(shù)據(jù)操作,要么全部執(zhí)行成功,要么全部失敗回滾到執(zhí)行之前的狀態(tài),就像這個事務從來沒有執(zhí)行過一樣。

隔離性(Isolation,又稱獨立性)

多個事務之間是相互隔離,互不影響的。數(shù)據(jù)庫允許多個并發(fā)事務同時對其數(shù)據(jù)進行讀寫和修改的能力,隔離性可以防止多個事務并發(fā)執(zhí)行時由于交叉執(zhí)行而導致數(shù)據(jù)的不一致。

四種隔離狀態(tài):
1. 讀未提交(Read uncommitted)
2. 讀提交(Read committed)
3. 可重復讀(Repeatable read)
4. 串行化(Serializable)

一致性(Consistency)

在事務操作之前和之后,數(shù)據(jù)都是保持一個相同的狀態(tài),數(shù)據(jù)庫的完整性沒有被破壞。
原子性和隔離性,對一致性有著至關重要的影響。

持久性(Durability)

當事務操作完成后,數(shù)據(jù)會被刷新到磁盤永久保存,即便是系統(tǒng)故障也不會丟失。

事務的語法

數(shù)據(jù)

#創(chuàng)建數(shù)據(jù)表:
create table account(
  -> id int(10) auto_increment,
  -> name varchar(30),
  -> balance int(10),
  -> primary key (id));
#插入數(shù)據(jù):
insert into account(name,balance) values('老王媳婦',100),('老王',10);
mysql> select * from account;
+----+--------------+---------+
| id | name     | balance |
+----+--------------+---------+
| 1 | 老王媳婦 |   100  |
| 2 | 老王    |   10 |
+----+--------------+---------+
老王媳婦有100元存在自己的微信賬戶上了,專門給老王每個月發(fā)零花錢用的,表現(xiàn)好給的多,老王也有自己的小金庫,目前已經(jīng)攢到了10元零花錢了,哈哈哈。

begin

事務啟動方式1
mysql> begin;
Query OK, 0 rows affected (0.00 sec)
mysql> 事務操作SQL......

start transaction [修飾符]

修飾符:
1. read only //只讀
2. read write //讀寫 默認
3. WITH CONSISTENT SNAPSHOT //一致性讀
事務啟動方式2
mysql> start transaction read only;
Query OK, 0 rows affected (0.00 sec)
mysql> 事務操作SQL......
#如設置read only后,對數(shù)據(jù)進行修改會報錯:

mysql> start transaction read only;
Query OK, 0 rows affected (0.00 sec)

mysql> update account set balance=banlance+30 where id = 2;
ERROR 1792 (25006): Cannot execute statement in a READ ONLY transaction.

commit

事務執(zhí)行提交,提交成功則刷新到磁盤
mysql> commit;
Query OK, 0 rows affected (0.00 sec)

rollback

事務執(zhí)行回滾,回到事務操作之前的狀態(tài)。
mysql> rollback;
Query OK, 0 rows affected (0.00 sec)
這里需要強調(diào)一下,ROLLBACK語句是我們程序員手動的去回滾事務時才去使用的,如果事務在執(zhí)行過程中遇到了某些錯誤而無法繼續(xù)執(zhí)行的話,事務自身會自動的回滾。

完整的提交例子

1月份,老王的表現(xiàn)很不錯,老王媳婦給他獎勵20元零花錢。

執(zhí)行步驟:
1. 從老王媳婦賬戶讀取數(shù)據(jù)
2. 從老王媳婦賬戶上減掉20元
3. 從老王賬戶讀取數(shù)據(jù)
4. 給老王賬戶增加20元
5. 執(zhí)行提交成功
6. 此時老王媳婦賬戶只有80元啦,而老王賬戶有30元啦,老王高興不得了咯

mysql> begin;
Query OK, 0 rows affected (0.01 sec)

mysql> update account set balance=balance-20 where id = 1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0

mysql> update account set balance=balance+20 where id = 2;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0

mysql> commit;
Query OK, 0 rows affected (0.01 sec)
#賬戶余額:
mysql> select * from account;
+----+--------------+---------+
| id | name | balance |
+----+--------------+---------+
| 1 | 老王媳婦 | 80 |
| 2 | 老王 | 30 |
+----+--------------+---------+

完整的回滾例子

2月份,老王本來表現(xiàn)得很棒,堅持干家務活和遛狗,老王媳婦要給他25元的零花錢,可老王不經(jīng)夸啊,老王媳婦正在給老王轉零花錢時,突然看到桌子上老王手機收到一條小女生發(fā)來的微信:親愛的王哥....,老王媳婦特別生氣,一怒之下撤回了轉賬,取消這個月的零花錢。

執(zhí)行步驟:
1. 從老王媳婦賬戶讀取數(shù)據(jù)
2. 從老王媳婦賬戶上減掉25元
3. 從老王賬戶讀取數(shù)據(jù)
4. 給老王賬戶增加25元
5. 此時老王媳婦撤回之前的操作
6. 此時,老王和老王媳婦的賬戶余額還是保持操作之前的數(shù)目

mysql> begin;
Query OK, 0 rows affected (0.00 sec)

mysql> update account set balance=balance-25 where id = 1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0

mysql> update account set balance=balance+25 where id = 2;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0

mysql> rollback;
Query OK, 0 rows affected (0.00 sec)
#賬戶余額:
mysql> select * from account;
+----+--------------+---------+
| id | name     | balance |
+----+--------------+---------+
| 1 | 老王媳婦 |   80 |
| 2 | 老王    |   30 |
+----+--------------+---------+

事務支持的存儲引擎

1. InnoDB
2. NDB
不支持的存儲引擎,比如在MyISAM上操作事務,事務不會生效,SQL語句直接自動執(zhí)行提交,所以回滾對于不支持事務的存儲引擎是無效的。
create table tb1(
  -> id int(10) auto_increment,
  -> name varchar(30),
  -> primary key (id)
  -> )engine=myisam charset=utf8mb4;
  
mysql> begin;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into tb1(name) values('Tom');
Query OK, 1 row affected (0.01 sec)

mysql> select * from tb1;
+----+------+
| id | name |
+----+------+
| 1 | Tom |
+----+------+
1 row in set (0.00 sec)

mysql> rollback;//回滾無效
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> select * from tb1;
+----+------+
| id | name |
+----+------+
| 1 | Tom |
+----+------+
1 row in set (0.00 sec)

事務的設置與查看

#查看事務開啟情況:
mysql> SHOW VARIABLES LIKE 'autocommit';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit | ON |
+---------------+-------+
默認是事務自動提交的,每執(zhí)行一條SQL就自動提交。

此時需要操作事務,則需要顯式開啟(begin or start transaction)和提交(commit)或回滾(rollback)。

如設置成OFF,則需要執(zhí)行提交(commit)或回滾(rollback)操作時才會真正執(zhí)行事務。

關閉自動提交方式

第一種
顯式的的使用START TRANSACTION或者BEGIN語句開啟一個事務。
第二種
把系統(tǒng)變量autocommit的值設置為OFF。
SET autocommit = OFF;

隱式提交情況

當我們使用START TRANSACTION或者BEGIN語句開啟了一個事務,或者把系統(tǒng)變量autocommit的值設置為OFF時,事務就不會進行自動提交,但是如果我們輸入了某些語句之后就會悄悄的提交掉,就像我們輸入了COMMIT語句了一樣,這種因為某些特殊的語句而導致事務提交的情況稱為隱式提交
定義或修改數(shù)據(jù)庫對象的數(shù)據(jù)定義語言(Data definition language,縮寫為:DDL)
所謂的數(shù)據(jù)庫對象,指的就是數(shù)據(jù)庫、表、視圖、存儲過程等等這些東西。當我們使用CREATE、ALTER、DROP等語句去修改這些所謂的數(shù)據(jù)庫對象時,就會隱式的提交前邊語句所屬于的事務。
BEGIN;
SELECT ... # 事務中的一條語句
UPDATE ... # 事務中的一條語句
... # 事務中的其它語句
CREATE TABLE ... # 此語句會隱式的提交前邊語句所屬于的事務
隱式使用或修改mysql數(shù)據(jù)庫中的表
隱式使用或修改mysql數(shù)據(jù)庫中的表。

當我們使用ALTER USER、CREATE USER、DROP USER、GRANT、RENAME USER、REVOKE、SET PASSWORD等語句時也會隱式的提交前邊語句所屬于的事務。

事務控制或關于鎖定的語句
事務控制或關于鎖定的語句。

當我們在一個事務還沒提交或者回滾時就又使用START TRANSACTION或者BEGIN語句開啟了另一個事務時,會隱式的提交上一個事務。

BEGIN;
SELECT ... # 事務中的一條語句
UPDATE ... # 事務中的一條語句
... # 事務中的其它語句
BEGIN; # 此語句會隱式的提交前邊語句所屬于的事務
或者當前的autocommit系統(tǒng)變量的值為OFF,我們手動把它調(diào)為ON時,也會隱式的提交前邊語句所屬的事務。

或者使用LOCK TABLES、UNLOCK TABLES等關于鎖定的語句也會隱式的提交前邊語句所屬的事務。

加載數(shù)據(jù)的語句
比如我們使用LOAD DATA語句來批量往數(shù)據(jù)庫中導入數(shù)據(jù)時,也會隱式的提交前邊語句所屬的事務。
關于MySQL復制的一些語句
使用START SLAVE、STOP SLAVE、RESET SLAVE、CHANGE MASTER TO等語句時也會隱式的提交前邊語句所屬的事務。
其它的一些語句
使用ANALYZE TABLE、CACHE INDEX、CHECK TABLE、FLUSH、 LOAD INDEX INTO CACHE、OPTIMIZE TABLE、REPAIR TABLE、RESET等語句也會隱式的提交前邊語句所屬的事務。

事務的保存點

概念

在事務對應的數(shù)據(jù)庫語句中打幾個點,我們在調(diào)用ROLLBACK語句時可以指定會滾到哪個點,而不是回到最初的原點。

有了事務的保存點,我們在進行復雜的事務操作時,我們不用擔心一出錯直接回滾到最初狀態(tài),就如一夜回到解放前。

使用語法

1. SAVEPOINT 保存點名稱;//標記保存點
2. ROLLBACK TO [SAVEPOINT] 保存點名稱;//回滾到某一個保存點
3. RELEASE SAVEPOINT 保存點名稱;//刪除

mysql> begin;
Query OK, 0 rows affected (0.00 sec)

mysql> update account set balance=balance-20 where id = 1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0

mysql> savepoint action1;
Query OK, 0 rows affected (0.02 sec)

mysql> select * from account;
+----+--------------+---------+
| id | name     | balance |
+----+--------------+---------+
| 1 | 老王媳婦 |   60 |
| 2 | 老王    |   30 |
+----+--------------+---------+

mysql> update account set balance=balance+30 where id = 2;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0

mysql> rollback to action1;//回滾到action1保存點
Query OK, 0 rows affected (0.00 sec)

mysql> select * from account;
+----+--------------+---------+
| id | name     | balance |
+----+--------------+---------+
| 1 | 老王媳婦 |   60 |
| 2 | 老王    |   30 |
+----+--------------+---------+

更多關于MySQL相關內(nèi)容感興趣的讀者可查看本站專題:《MySQL事務操作技巧匯總》、《MySQL索引操作技巧匯總》、《MySQL常用函數(shù)大匯總》、《MySQL日志操作技巧大全》、《MySQL存儲過程技巧大全》及《MySQL數(shù)據(jù)庫鎖相關技巧匯總》

希望本文所述對大家MySQL數(shù)據(jù)庫計有所幫助。

您可能感興趣的文章:
  • MySQL如何實現(xiàn)事務的ACID
  • MySQL為什么要避免大事務以及大事務解決的方法
  • 解析MySQL8.0新特性——事務性數(shù)據(jù)字典與原子DDL
  • MySQL 如何查詢當前最新事務ID
  • MySQL事務及Spring隔離級別實現(xiàn)原理詳解
  • MySQL查看和修改事務隔離級別的實例講解
  • Mysql數(shù)據(jù)庫高級用法之視圖、事務、索引、自連接、用戶管理實例分析
  • MySql 索引、鎖、事務知識點小結
  • MySql 知識點之事務、索引、鎖原理與用法解析
  • MySQL 如何使用事務

標簽:白銀 秦皇島 恩施 澳門 益陽 寧夏 杭州 定西

巨人網(wǎng)絡通訊聲明:本文標題《MySQL 事務概念與用法深入詳解》,本文關鍵詞  MySQL,事務,概念,與,用法,;如發(fā)現(xiàn)本文內(nèi)容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《MySQL 事務概念與用法深入詳解》相關的同類信息!
  • 本頁收集關于MySQL 事務概念與用法深入詳解的相關信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    久久久精品蜜桃| 久久精品欧美日韩| 久久蜜臀精品av| 日本欧美一区二区三区| 欧美草草影院在线视频| 激情成人午夜视频| 久久久五月婷婷| 欧美电影免费观看高清完整版在线 | 一级女性全黄久久生活片免费| 蜜臀av国产精品久久久久 | 狠狠色丁香久久婷婷综| 欧美区在线观看| 天堂成人国产精品一区| 欧美色网站导航| 国产剧情一区二区| 中文字幕亚洲精品在线观看 | 亚洲精品欧美二区三区中文字幕| 色悠悠久久综合| 中文字幕亚洲欧美在线不卡| 亚洲柠檬福利资源导航| 精品一二三四区| 亚洲啪啪综合av一区二区三区| 91麻豆国产精品久久| 石原莉奈在线亚洲二区| 日韩欧美精品在线| 99久久久久久| 国产在线一区二区| 天堂在线亚洲视频| 亚洲特级片在线| 久久精品亚洲麻豆av一区二区 | 67194成人在线观看| 东方aⅴ免费观看久久av| 日韩和欧美一区二区三区| 国产精品成人免费在线| 欧美成人a∨高清免费观看| 欧美曰成人黄网| 91在线porny国产在线看| 日韩国产一区二| 亚洲自拍都市欧美小说| 国产精品毛片高清在线完整版| 色综合久久久久网| bt7086福利一区国产| 日本va欧美va瓶| 五月婷婷综合激情| 午夜国产精品一区| 亚洲综合免费观看高清完整版在线| 国产日本欧美一区二区| 国产三级精品在线| 国产欧美视频在线观看| 久久久久久99久久久精品网站| 精品人在线二区三区| 精品国产91久久久久久久妲己| 91麻豆精品国产自产在线观看一区| 成人午夜精品一区二区三区| 成人av电影免费观看| 欧美日韩日日夜夜| 在线电影院国产精品| 国产人成亚洲第一网站在线播放| 国产精品久久久久久久久免费相片| 久久久久久久久久久久久女国产乱| 欧美日韩一卡二卡| 国产精品人成在线观看免费| 精品一区二区三区在线观看| 欧美日韩在线一区二区| 4438x成人网最大色成网站| 欧美高清视频www夜色资源网| 亚洲va韩国va欧美va精品| 国产欧美一区二区三区鸳鸯浴 | 亚洲综合在线电影| 久久网这里都是精品| 亚洲成a人在线观看| 欧美xxxx老人做受| 成年人国产精品| 国产精品久久久久久久久久免费看| 亚洲一区二区三区爽爽爽爽爽| 中文字幕av免费专区久久| 欧美日高清视频| 粉嫩aⅴ一区二区三区四区| 精品久久免费看| 色久优优欧美色久优优| 不卡在线视频中文字幕| 欧美视频精品在线| 亚洲国产另类av| 欧美另类videos死尸| 欧美a级一区二区| xfplay精品久久| 国产一区不卡精品| 中文字幕乱码一区二区免费| 国产精品996| 久久99久久久欧美国产| 欧美电影免费提供在线观看| 成人午夜在线免费| 日本欧美韩国一区三区| 国产高清精品网站| 成人精品免费网站| 久久精品一区二区三区四区| 99久久99久久精品免费观看| 久久久九九九九| 成人国产精品免费观看视频| 久久亚洲精品小早川怜子| 精品综合免费视频观看| 精品久久国产老人久久综合| 91麻豆国产精品久久| 91丨九色丨蝌蚪丨老版| 裸体健美xxxx欧美裸体表演| 亚洲成av人片一区二区梦乃| 国产精品免费人成网站| 欧美日韩国产一二三| 欧美性大战久久久久久久| 风流少妇一区二区| 久久99国产精品麻豆| 激情综合亚洲精品| 天堂影院一区二区| 高清在线不卡av| 国产成人精品免费| 国产在线播精品第三| 国产福利一区在线| 国产在线麻豆精品观看| 日韩av中文字幕一区二区三区| 国产欧美一区二区精品性色超碰 | 国产精品一区一区| 在线视频国内自拍亚洲视频| 亚洲成人黄色小说| 韩国av一区二区三区四区| 欧美肥妇毛茸茸| wwwwww.欧美系列| 91一区二区在线观看| 色屁屁一区二区| 狠狠色狠狠色合久久伊人| 18欧美乱大交hd1984| 欧美三片在线视频观看 | 日韩成人精品在线| 亚洲一本大道在线| 亚洲色图欧美激情| 久久久国产精华| 久久蜜桃av一区二区天堂| 日韩欧美综合一区| 欧美日韩亚洲综合一区二区三区| 色综合久久中文综合久久97| 99久久精品国产一区| 国产xxx精品视频大全| 国模无码大尺度一区二区三区| 日本成人中文字幕在线视频| 免费av网站大全久久| 日韩高清电影一区| 日韩福利视频导航| 亚洲五码中文字幕| 日韩精品电影在线观看| 亚洲不卡一区二区三区| 亚洲电影第三页| 久久国产精品露脸对白| 麻豆成人av在线| 久久99国产精品麻豆| 粉嫩aⅴ一区二区三区四区| 国产成人免费在线观看不卡| 国产成人综合网| 暴力调教一区二区三区| 99久久精品99国产精品| 在线视频中文字幕一区二区| 理论电影国产精品| 国产精品色呦呦| 不卡在线观看av| 国产精品国产三级国产普通话蜜臀 | 国产精品羞羞答答xxdd| 国产精品2024| 91在线云播放| 欧美日韩国产大片| 欧美精品vⅰdeose4hd| 日韩午夜小视频| 26uuu国产日韩综合| 一区二区三区日韩欧美| 9l国产精品久久久久麻豆| 欧美自拍偷拍午夜视频| 日韩一级欧美一级| 一区二区三区日韩| 日本精品裸体写真集在线观看| 亚洲人精品午夜| 欧美日韩一区久久| 精品一区二区在线免费观看| 亚洲精品一区二区三区99| 国产一区二区主播在线| 亚洲视频一区在线观看| 欧美色综合网站| 日韩高清一区二区| 久久久久久久久一| 成人天堂资源www在线| 亚洲免费观看在线视频| 久久亚洲欧美国产精品乐播| 国产91对白在线观看九色| 亚洲成年人影院| 色综合色狠狠天天综合色| 久久久亚洲精品一区二区三区| 偷窥国产亚洲免费视频| 欧美日韩国产高清一区二区| 综合网在线视频| 99re这里只有精品视频首页| 337p日本欧洲亚洲大胆精品 | 色综合av在线| 午夜成人免费视频| 久久九九国产精品|