<h2 id="MysqL事务以及事务隔离级别">MysqL事务以及事务隔离级别
-
MysqL事务主要用于处理操作量大,复杂度高的数据。比如在人员管理系统中,你删除一个人员,你就要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等,这些数据库操作语句就构成了一个事务
- 一般来说,事务必须满足4个条件:原子性,一致性,隔离性,持久性
在MySQL命令行的默认是设置下,事务都是自动提交的,即执行sql语句后就会马上执行COMMIT操作。因此要显式的开启一个事务需要使用命令BEGIN或START TRANSACTION,或者执行命令SET AUTOCOMMIT=0,用来禁止使用当前绘画的自动提交
-
BEGIN或START TRANSACTION;显式地开启一个事务
-
COMMIT;也可以使用COMMIT WORK,二者等价的。COMMIT会提交事务,并使已对数据库进行的所有修改成为永久性
-
ROLLBACK;也可以使用ROLLBACK WORK,二者等价。回滚会结束用户的事务,并撤回正在进行的所有未提交的修改
-
SAVEPOINT identifier;SAVEPOINT允许在事务中创建一个保存点,一个事务可以有多个SAVEPOINT
-
RELESE SAVEPOINT identifier;删除一个事务的保存点,当没有指定的保存点时,执行该语句会抛出一个异常
-
ROLLBACK TO identified;把事务回滚到标记点
-
SET TRANSACTION;用来设置事务的隔离级别。InnoDB存储引擎提供事务隔离级别有READ UNCOMMITTED,READ COMMITTED,REPEATABLE READ和SERIALIZABLE
MysqL事务处理主要有两种方法">MysqL事务处理主要有两种方法:
- 事务A跟事务B之间具有一定的隔离性
- read uncommited 读未提交
- 在该隔离级别,所有事务都可以看到其他未提交事务的执行结果。本隔离级别很少用于实际应用。读取未提交的数据称为脏数据
- read COMMIT
- repeatable read
- serializable
- 在my.cnf文件设置
- read-uncommitted
- READ-COMMITED
- REPEATABLE-READ
- SERIALIZABLE
* 例如
[MysqLId]
transaction-isolation = READ-COMMITTED
- 通过命令动态设置隔离级别
SET [GLOBAL|SESSION] TRANSACTION ISOLATION LEVEL
其中isolation-level可以是:
- READ UNCOMMITTED
- READ COMMITTED
- REPEATABLE READ
- SERIALIZABLE
GLOBAL|SESSION表示事务隔离级别的作用范围:
GLOBAL:表示对所有会话有效
SESSION:表示对当前会话有效
<h3 id="事务并发问题">事务并发问题
- 脏读:事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据
- 不可重复读:事务A多次读取到同一数据,事务B在事务A多次读取过程中,对数据做了更新并未提交,导致事务A多次读取同一条数据,结果不一致
- 幻读:前后读取的结果数据条数不一致。这是因为事务A的多次读取过程中,事务B对表进行插入或删除操作
- 事务A跟事务B之间具有一定的隔离性
- read uncommited 读未提交
- 在该隔离级别,所有事务都可以看到其他未提交事务的执行结果。本隔离级别很少用于实际应用。读取未提交的数据称为脏数据
- read COMMIT
- repeatable read
- serializable
- 在my.cnf文件设置
- read-uncommitted
- READ-COMMITED
- REPEATABLE-READ
- SERIALIZABLE
* 例如
[MysqLId]
transaction-isolation = READ-COMMITTED
- 通过命令动态设置隔离级别
SET [GLOBAL|SESSION] TRANSACTION ISOLATION LEVEL
其中isolation-level可以是:
- READ UNCOMMITTED
- READ COMMITTED
- REPEATABLE READ
- SERIALIZABLE
GLOBAL|SESSION表示事务隔离级别的作用范围:
GLOBAL:表示对所有会话有效
SESSION:表示对当前会话有效
<h3 id="事务并发问题">事务并发问题
- read-uncommitted
- READ-COMMITED
- REPEATABLE-READ
- SERIALIZABLE
* 例如
[MysqLId]
transaction-isolation = READ-COMMITTED
SET [GLOBAL|SESSION] TRANSACTION ISOLATION LEVEL
其中isolation-level可以是:
- READ UNCOMMITTED
- READ COMMITTED
- REPEATABLE READ
- SERIALIZABLE
GLOBAL|SESSION表示事务隔离级别的作用范围:
GLOBAL:表示对所有会话有效
SESSION:表示对当前会话有效
- 脏读:事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据
- 不可重复读:事务A多次读取到同一数据,事务B在事务A多次读取过程中,对数据做了更新并未提交,导致事务A多次读取同一条数据,结果不一致
- 幻读:前后读取的结果数据条数不一致。这是因为事务A的多次读取过程中,事务B对表进行插入或删除操作
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。