日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql隔离级别 举例_mysql的事务隔离级别举例

發(fā)布時(shí)間:2024/4/19 数据库 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql隔离级别 举例_mysql的事务隔离级别举例 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

事務(wù)是怎么回事,之前已經(jīng)聊過(參見Oracle事務(wù)的隔離),無關(guān)哪個(gè)數(shù)據(jù)庫,只要提到事務(wù),都是這四種隔離級(jí)別。mysql的默認(rèn)隔離級(jí)別是3——可重復(fù)讀。更重要的是,是否支持事務(wù),跟mysql的存儲(chǔ)引擎相關(guān)。登陸mysql,查詢存儲(chǔ)引擎:

mysql>show engines;+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+

| Engine | Support | Comment | Transactions | XA | Savepoints |

+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+

| InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |

| MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |

| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |

| BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO |

| MyISAM | YES | MyISAM storage engine | NO | NO | NO |

| CSV | YES | CSV storage engine | NO | NO | NO |

| ARCHIVE | YES | Archive storage engine | NO | NO | NO |

| PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO |

| FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL |

+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+

9 rows in set (0.00 sec)

我們看到,這么多存儲(chǔ)引擎,也就一個(gè)InnoDB支持事務(wù)。再瞧一下默認(rèn)的事務(wù)隔離級(jí)別:

mysql> select@@tx_isolation;+-----------------+

| @@tx_isolation |

+-----------------+

| REPEATABLE-READ |

+-----------------+

1 row in set, 1 warning (0.00sec)

mysql> select@@global.tx_isolation;+-----------------------+

| @@global.tx_isolation |

+-----------------------+

| REPEATABLE-READ |

+-----------------------+

1 row in set, 1 warning (0.00 sec)

我們看到,不管是當(dāng)前會(huì)話也好,整個(gè)系統(tǒng)也好,默認(rèn)的隔離級(jí)別都是可重復(fù)讀。

再看下默認(rèn)的事務(wù)自動(dòng)提交開關(guān):

mysql> show variables like ‘a(chǎn)utocommit‘;+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| autocommit | ON |

+---------------+-------+

1 row in set, 1 warning (0.00 sec)

我們把上面的開關(guān)給關(guān)了,好測(cè)試:

mysql> set autocommit=off;

Query OK,0 rows affected (0.00sec)

mysql> show variables like ‘a(chǎn)utocommit‘;+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| autocommit | OFF |

+---------------+-------+

1 row in set, 1 warning (0.00 sec)

我們建個(gè)表測(cè)試一下:

mysql>create table test_wlf->(-> id INT(11),-> name VARCHAR(25)->);

Query OK,0 rows affected (0.06 sec)

插入一條數(shù)據(jù):

mysql> insert into test_wlf values(1,"wulf");

Query OK,1 row affected (0.03sec)

mysql> select *from test_wlf;+------+------+

| id | name |

+------+------+

| 1 | wulf |

+------+------+

1 row in set (0.00 sec)

再來一個(gè)窗口,同樣把a(bǔ)utocommit關(guān)掉,兩事務(wù)同時(shí)搞起:

因?yàn)楫?dāng)前的事務(wù)隔離級(jí)別是可重復(fù)讀,所以右邊的事務(wù)始終可以重復(fù)讀取到wulf這條數(shù)據(jù),即使左邊的事務(wù)新增了wumanshu這條數(shù)據(jù),按理應(yīng)該出現(xiàn)幻讀,可惜已經(jīng)被InnoDB用mvcc(多版本并發(fā)控制)解決了。換句話說,幻讀在InnoDB已經(jīng)死絕了。

接下來我們把兩個(gè)窗口都改成已提交讀:

mysql> set tx_isolation=‘READ-COMMITTED‘;

Query OK,0 rows affected, 1 warning (0.00sec)

mysql> select@@tx_isolation;+----------------+

| @@tx_isolation |

+----------------+

| READ-COMMITTED |

+----------------+

1 row in set, 1 warning (0.00 sec)

mysql> set global tx_isolation=‘READ-COMMITTED‘;

Query OK,0 rows affected, 1 warning (0.00sec)

mysql> select@@global.tx_isolation;+-----------------------+

| @@global.tx_isolation |

+-----------------------+

| READ-COMMITTED |

+-----------------------+

1 row in set, 1 warning (0.00 sec)

再試試修改數(shù)據(jù):

以上可以看到已提交讀出現(xiàn)了不可重復(fù)讀。繼續(xù),接下來我們把兩個(gè)窗口都改成未提交讀:

mysql> set tx_isolation=‘READ-UNCOMMITTED‘;

Query OK,0 rows affected, 1 warning (0.00sec)

mysql> set global tx_isolation=‘READ-UNCOMMITTED‘;

Query OK,0 rows affected, 1 warning (0.00sec)

mysql> select@@tx_isolation;+------------------+

| @@tx_isolation |

+------------------+

| READ-UNCOMMITTED |

+------------------+

1 row in set, 1 warning (0.00sec)

mysql> select@@global.tx_isolation;+-----------------------+

| @@global.tx_isolation |

+-----------------------+

| READ-UNCOMMITTED |

+-----------------------+

1 row in set, 1 warning (0.00 sec)

再次更新id為2的name值,事務(wù)的中間結(jié)果都被查出來了,臟讀出現(xiàn):

原文:https://www.cnblogs.com/wuxun1997/p/14087208.html

與50位技術(shù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖

總結(jié)

以上是生活随笔為你收集整理的mysql隔离级别 举例_mysql的事务隔离级别举例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。