日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

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

瀏覽:172日期:2023-10-15 09:11:08

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

事務的概念MySQL事務是一個或者多個的數據庫操作,要么全部執行成功,要么全部失敗回滾。

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

事務的狀態活動的(active)事務對應的數據庫操作正在執行過程中時,我們就說該事務處在活動的狀態。部分提交的(partially committed)當事務中的最后一個操作執行完成,但由于操作都在內存中執行,所造成的影響并沒有刷新到磁盤時,我們就說該事務處在部分提交的狀態。失敗的(failed)當事務處在活動的或者部分提交的狀態時,可能遇到了某些錯誤(數據庫自身的錯誤、操作系統錯誤或者直接斷電等)而無法繼續執行,或者人為的停止當前事務的執行,我們就說該事務處在失敗的狀態。中止的(aborted)如果事務執行了半截而變為失敗的狀態,撤銷失敗事務對當前數據庫造成的影響,我們把這個撤銷的過程稱之為回滾。

當回滾操作執行完畢時,也就是數據庫恢復到了執行事務之前的狀態,我們就說該事務處在了中止的狀態。

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

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

從圖中大家也可以看出了,只有當事務處于提交的或者中止的狀態時,一個事務的生命周期才算是結束了。對于已經提交的事務來說,該事務對數據庫所做的修改將永久生效,對于處于中止狀態的事務,該事務對數據庫所做的所有修改都會被回滾到沒執行該事務之前的狀態。事務的作用事務主要是為了保證復雜數據庫操作數據的一致性,尤其是在并發訪問數據時。MySQL 事務主要用于處理操作量大,復雜度高的數據。事務的特點原子性(Atomicity,又稱不可分割性)事務的數據操作,要么全部執行成功,要么全部失敗回滾到執行之前的狀態,就像這個事務從來沒有執行過一樣。隔離性(Isolation,又稱獨立性)多個事務之間是相互隔離,互不影響的。數據庫允許多個并發事務同時對其數據進行讀寫和修改的能力,隔離性可以防止多個事務并發執行時由于交叉執行而導致數據的不一致。

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

一致性(Consistency)在事務操作之前和之后,數據都是保持一個相同的狀態,數據庫的完整性沒有被破壞。原子性和隔離性,對一致性有著至關重要的影響。持久性(Durability)當事務操作完成后,數據會被刷新到磁盤永久保存,即便是系統故障也不會丟失。事務的語法數據

#創建數據表:create table account( -> id int(10) auto_increment, -> name varchar(30), -> balance int(10), -> primary key (id));#插入數據:insert into account(name,balance) values(’老王媳婦’,100),(’老王’,10);

mysql> select * from account;+----+--------------+---------+| id | name | balance |+----+--------------+---------+| 1 | 老王媳婦 | 100 || 2 | 老王 | 10 |+----+--------------+---------+老王媳婦有100元存在自己的微信賬戶上了,專門給老王每個月發零花錢用的,表現好給的多,老王也有自己的小金庫,目前已經攢到了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后,對數據進行修改會報錯: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事務執行提交,提交成功則刷新到磁盤

mysql> commit;Query OK, 0 rows affected (0.00 sec)rollback事務執行回滾,回到事務操作之前的狀態。

mysql> rollback;Query OK, 0 rows affected (0.00 sec)這里需要強調一下,ROLLBACK語句是我們程序員手動的去回滾事務時才去使用的,如果事務在執行過程中遇到了某些錯誤而無法繼續執行的話,事務自身會自動的回滾。完整的提交例子1月份,老王的表現很不錯,老王媳婦給他獎勵20元零花錢。

執行步驟:1. 從老王媳婦賬戶讀取數據2. 從老王媳婦賬戶上減掉20元3. 從老王賬戶讀取數據4. 給老王賬戶增加20元5. 執行提交成功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: 0mysql> update account set balance=balance+20 where id = 2;Query OK, 1 row affected (0.00 sec)Rows matched: 1 Changed: 1 Warnings: 0mysql> commit;Query OK, 0 rows affected (0.01 sec)

#賬戶余額:mysql> select * from account;+----+--------------+---------+| id | name | balance |+----+--------------+---------+| 1 | 老王媳婦 | 80 || 2 | 老王 | 30 |+----+--------------+---------+完整的回滾例子2月份,老王本來表現得很棒,堅持干家務活和遛狗,老王媳婦要給他25元的零花錢,可老王不經夸啊,老王媳婦正在給老王轉零花錢時,突然看到桌子上老王手機收到一條小女生發來的微信:親愛的王哥....,老王媳婦特別生氣,一怒之下撤回了轉賬,取消這個月的零花錢。

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

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: 0mysql> update account set balance=balance+25 where id = 2;Query OK, 1 row affected (0.00 sec)Rows matched: 1 Changed: 1 Warnings: 0mysql> rollback;Query OK, 0 rows affected (0.00 sec)

#賬戶余額:mysql> select * from account;+----+--------------+---------+| id | name | balance |+----+--------------+---------+| 1 | 老王媳婦 | 80 || 2 | 老王 | 30 |+----+--------------+---------+事務支持的存儲引擎

1. InnoDB2. NDB不支持的存儲引擎,比如在MyISAM上操作事務,事務不會生效,SQL語句直接自動執行提交,所以回滾對于不支持事務的存儲引擎是無效的。

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 |+---------------+-------+默認是事務自動提交的,每執行一條SQL就自動提交。

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

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

關閉自動提交方式第一種顯式的的使用START TRANSACTION或者BEGIN語句開啟一個事務。第二種把系統變量autocommit的值設置為OFF。

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

BEGIN;SELECT ... # 事務中的一條語句UPDATE ... # 事務中的一條語句... # 事務中的其它語句CREATE TABLE ... # 此語句會隱式的提交前邊語句所屬于的事務隱式使用或修改mysql數據庫中的表隱式使用或修改mysql數據庫中的表。

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

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

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

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

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

加載數據的語句比如我們使用LOAD DATA語句來批量往數據庫中導入數據時,也會隱式的提交前邊語句所屬的事務。關于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等語句也會隱式的提交前邊語句所屬的事務。事務的保存點概念在事務對應的數據庫語句中打幾個點,我們在調用ROLLBACK語句時可以指定會滾到哪個點,而不是回到最初的原點。

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

使用語法

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: 0mysql> 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: 0mysql> rollback to action1;//回滾到action1保存點Query OK, 0 rows affected (0.00 sec)mysql> select * from account;+----+--------------+---------+| id | name | balance |+----+--------------+---------+| 1 | 老王媳婦 | 60 || 2 | 老王 | 30 |+----+--------------+---------+

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

希望本文所述對大家MySQL數據庫計有所幫助。

標簽: MySQL 數據庫
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美理论视频| 伊人久久av| 国产精品嫩草99av在线| 欧美日韩国产高清电影| 亚洲一区观看| 日韩av中文字幕一区二区三区| 青草久久视频| 欧美国产免费| 久久久久久色| 久久影院一区二区三区| 国产成人免费精品| 久久久久久黄| 老司机久久99久久精品播放免费| 精品中文一区| 亚洲精品国产精品粉嫩| 国产精品啊v在线| 国产福利电影在线播放| 亚洲v在线看| 亚洲精品精选| 国产66精品| 亚洲免费中文| 久久wwww| 久久精品亚洲人成影院| 一区二区91| 国产精品.xx视频.xxtv| 91亚洲人成网污www| 美女毛片一区二区三区四区| 蜜桃av一区二区在线观看| 亚洲精品第一| 成午夜精品一区二区三区软件| 欧美 日韩 国产一区二区在线视频| 亚洲在线电影| 你懂的网址国产 欧美| 视频小说一区二区| 日韩不卡免费视频| 久久久久美女| 日韩高清在线不卡| 欧美日韩精品免费观看视完整| 亚洲免费中文| 国产+成+人+亚洲欧洲在线| 国产精品美女久久久| 久久精品国产亚洲一区二区三区| 99亚洲视频| 欧美亚洲tv| 免费视频亚洲| 久久精品色播| 婷婷综合国产| 激情久久婷婷| 久久精品国产一区二区| 亚洲一区二区三区高清| 久久av网站| 久久性天堂网| 日韩综合精品| 久久精品999| 欧美日韩精品一本二本三本| 欧美国产日本| 亚洲精品麻豆| 久久亚洲国产| 久久永久免费| 男女男精品视频网| 亚洲伦乱视频| 国产精品v亚洲精品v日韩精品| 99综合视频| 日韩成人亚洲| 国产精品13p| 国产精品一区二区三区av| 一区在线免费观看| 91看片一区| 欧美激情在线精品一区二区三区| 国产精品腿扒开做爽爽爽挤奶网站| 精品视频一区二区三区在线观看| 亚洲精选91| 国产高清一区二区| 日韩免费一区| 国产欧美在线观看免费| 丝瓜av网站精品一区二区 | 成人在线超碰| 欧美伊人久久| 亚洲欧美网站在线观看| 99亚洲视频| 亚洲电影在线一区二区三区| 女生影院久久| 高清av不卡| 成人亚洲欧美| 国产成人久久| 精品欠久久久中文字幕加勒比| 亚洲免费观看高清完整版在线观| 亚洲女同中文字幕| 亚洲精品小说| 欧美日韩国产传媒| 不卡一区综合视频| 欧美日韩国产精品一区二区亚洲| 极品裸体白嫩激情啪啪国产精品| 久久香蕉国产| 今天的高清视频免费播放成人| 久久视频精品| 亚洲福利久久| 欧美在线网站| 亚洲黄色影院| 蜜臀久久99精品久久久久宅男 | 性欧美长视频| 免费久久99精品国产自在现线| 黄色成人91| 日韩在线观看一区二区| 婷婷综合一区| 久久国产欧美日韩精品| 国产精品久一| 精品国产精品久久一区免费式| 久久精品日韩欧美| 综合日韩av| 精品欧美久久| 亚洲久久视频| 日韩高清一区在线| 国产精品亚洲片在线播放| 麻豆国产91在线播放| 91一区二区| 欧美日韩国产一区二区三区不卡| 中文久久精品| 日韩国产欧美一区二区三区| 国产精品视频3p| 精品美女视频 | 日韩av影院| 国产一区二区三区黄网站| 免费在线小视频| 国产精品毛片在线看| 久久国产精品99国产| 欧美日韩99| 麻豆视频在线观看免费网站黄 | 成人一区而且| 午夜国产精品视频免费体验区| 老色鬼久久亚洲一区二区| 日韩在线观看一区二区三区| 国产精品地址| 欧美成a人国产精品高清乱码在线观看片在线观看久 | 夜鲁夜鲁夜鲁视频在线播放| 国产综合亚洲精品一区二| 免费观看在线综合| 免费在线欧美黄色| 91精品高清| 国产精区一区二区| 99视频精品全国免费| 中文字幕日韩亚洲| 精品99久久| 悠悠资源网久久精品| 国产欧美欧美| 1000部精品久久久久久久久| 亚洲精品中文字幕99999| 国产一区一一区高清不卡| 黄色国产精品| 国产精品伦一区二区| 五月综合激情| 精品黄色一级片| 美女精品网站| 日韩av专区| 午夜性色一区二区三区免费视频| 久久久久97| 在线观看一区| 日韩不卡在线| 国产精品日本一区二区不卡视频 | 高清一区二区三区av| 日韩精品一级中文字幕精品视频免费观看 | 日本亚洲视频| 日韩久久电影| 欧美精品中文| 亚洲一区二区成人| аⅴ资源天堂资源库在线| 中文字幕视频精品一区二区三区| 麻豆mv在线观看| 国产麻豆精品久久| 亚洲欧美日韩国产| 国产精品99一区二区三区| 日韩精品一级中文字幕精品视频免费观看 | 久久影院一区二区三区| 亚洲日本免费电影| 欧美1区免费| 色婷婷色综合| 日韩av午夜在线观看| 夜夜嗨一区二区三区| 欧美成a人免费观看久久| 国产精品日韩精品中文字幕| 爽好久久久欧美精品| 成午夜精品一区二区三区软件| 日韩欧美激情电影| 性一交一乱一区二区洋洋av| 欧美成人基地| 天堂av在线| 精品视频国产| 国产精品一区亚洲| 日本在线视频一区二区| 亚洲一级二级| 亚洲91视频| 成人va天堂| 在线看片福利| 成人在线免费观看网站| 国产精品白浆| 国产欧美日韩免费观看| 另类av一区二区| 午夜在线播放视频欧美| 一区免费视频| 99国产精品99久久久久久粉嫩|