当前位置:Gxlcms > 数据库问题 > 老男孩MySQL笔记 第二天2-2

老男孩MySQL笔记 第二天2-2

时间:2021-07-01 10:21:17 帮助过:1人阅读

级别的方法

 

具有ACID四种特性。

但是Isolation可能引起如下问题

1.脏读

许读取到未提交的数据。

2.不可重复

如果你在时间T1取了一些记录,在T2再想重新取一次同记录时记录可能已被改、或者消失不

3.

解决了不重复,保了同一个事里,查询果都是事开始的状(一致性)。但是,如果另一个事提交了新数据,本事再更新,就会惊奇的发现些新数据,貌似之前到的数据是鬼影的幻

 

ANSI/ISOSQL-92准定的四种隔离级别

1.Read Uncommitted

2.Read Committed

3.Repeatable Read

4.Serializable

 

隔离解

脏读

不可重复

Read Uncommitted

Y

Y

Y

Read Committed

N

Y

Y

Repeatable(default)

N

N

Y

Serializable

N

N

N

 

下面用Mysql数据做一些小实验

 

 

方法1:

 

可以用SET TRANSACTION句改变单个会或者所有新进连接的隔离级别。它的法如下:

SET [SESSION | GLOBAL] TRANSACTIONISOLATION LEVEL{READ UNCOMMITTED| READ COMMITTED | REPEATABLE READ| SERIALIZABLE}

注意:默的行(不sessionglobal)是下一个(未开始)事务设置隔离级别。如果你使用GLOBAL字,句在全局从那点开始建的所有新接(除了不存在的接)置默务级别。你需要SUPER限来做个。使用SESSION将来在当前接上行的事务设置默务级别任何客端都能自由改隔离级别(甚至在事的中),或者下一个事务设置隔离级别 你可以用下列查询全局和会隔离级别

SELECT @@global.tx_isolation;

SELECT @@session.tx_isolation;

SELECT @@tx_isolation;

网上有人使用set tx_isolation命令:

mysql> settx_isolation=‘read-committed‘;Query OK, 0 rows affected (0.00sec)+----------------+| @@tx_isolation |+----------------+| READ-COMMITTED|+----------------+1 row in set (0.00 sec)

mysql> select@@session.tx_isolation;+------------------------+| @@session.tx_isolation|+------------------------+|READ-COMMITTED        |+------------------------+1 row in set (0.00 sec)隔离了。网上有人这样set @@tx_isolation命令,但个命令是有问题的。

mysql>  set @@tx_isolation=‘read-committed‘;QueryOK, 0 rows affected (0.00 sec)

mysql> select@@session.tx_isolation;+------------------------+| @@session.tx_isolation|+------------------------+| REPEATABLE-READ       |+------------------------+1 row in set (0.00 sec)

mysql> select @@tx_isolation;+-----------------+|@@tx_isolation  |+-----------------+| REPEATABLE-READ |+-----------------+1row in set (0.00 sec)session事物的隔离级别并没有改

 

 

方法2:

 [sql]viewplaincopy

 

1.       mysql> select version();  

2.       +------------+  

3.       | version()  |  

4.       +------------+  

5.       | 5.1.52-log |  

6.       +------------+  

7.       1 row in set (0.00 sec)  

 

 

InnoDB引擎统级的隔离级别话级的隔离级别

[sql]viewplaincopy

 

1.       mysql> select @@global.tx_isolation,@@tx_isolation;  

2.       +-----------------------+-----------------+  

3.       | @@global.tx_isolation | @@tx_isolation  |  

4.       +-----------------------+-----------------+  

5.       REPEATABLE-READ       | REPEATABLE-READ |  

6.       +-----------------------+-----------------+  

7.       1 row in set (0.00 sec)  

 

更改会话级的隔离级别

 

[sql]viewplaincopy

 

1.       Session 1:  

2.       mysql> set session tx_isolation=‘read-uncommitted‘;  

3.       Query OK, 0 rows affected (0.00 sec)  

4.       mysql> select @@global.tx_isolation,@@tx_isolation;  

5.       +-----------------------+------------------+  

6.       | @@global.tx_isolation | @@tx_isolation   |  

7.       +-----------------------+------------------+  

8.       REPEATABLE-READ       | READ-UNCOMMITTED |  

9.       +-----------------------+------------------+  

10.     1 row in set (0.00 sec)  

11.       

12.       

13.     Session 2:  

14.     mysql> select @@global.tx_isolation, @@tx_isolation;  

15.     +-----------------------+-----------------+  

16.     | @@global.tx_isolation | @@tx_isolation  |  

17.     +-----------------------+-----------------+  

18.     REPEATABLE-READ       | REPEATABLE-READ |  

19.     +-----------------------+-----------------+  

20.     1 row in set (0.00 sec)  

 

更改系统级的隔离级别

 

 

[sql]viewplaincopy

 

1.       Session 1:  

2.       mysql> set global tx_isolation=‘read-uncommitted‘;  

3.       Query OK, 0 rows affected (0.00 sec)  

4.       mysql> select @@global.tx_isolation,@@tx_isolation;  

5.       +-----------------------+------------------+  

6.       | @@global.tx_isolation | @@tx_isolation   |  

7.       +-----------------------+------------------+  

8.       READ-UNCOMMITTED      | READ-UNCOMMITTED |  

9.       +-----------------------+------------------+  

10.     1 row in set (0.00 sec)  

11.       

12.     Session 2:  

13.     mysql> select @@global.tx_isolation, @@tx_isolation;  

14.     +-----------------------+-----------------+  

15.     | @@global.tx_isolation | @@tx_isolation  |  

16.     +-----------------------+-----------------+  

17.     READ-UNCOMMITTED      | REPEATABLE-READ |  

18.     +-----------------------+-----------------+  

19.     1 row in set (0.00 sec)  

 

SQL句的自提交

 

[sql]viewplaincopy

 

1.       mysql> set autocommit=off;  

2.       Query OK, 0 rows affected (0.00 sec)  

 

SQL句自提交是否关

 

[plain]viewplaincopy

 

1.       mysql> show variables like ‘autocommit‘;  

2.       +---------------+-------+  

3.       | Variable_name | Value |  

4.       +---------------+-------+  

5.       | autocommit    | OFF   |  

6.       +---------------+-------+  

7.       1 row in set (0.00 sec)  

 

人气教程排行