事务

来源:互联网 发布:网络招生平台 编辑:程序博客网 时间:2024/05/18 15:27

1.事务的概念

事务(Transaction)是并发控制的单位,是用户定义的一系列操作。这些操作要么全做,要么都不做,是一个不可分割的单位。通过事务,能够将逻辑相关的一组操作绑定在一起,以便保证数据的完整性。

2.事务的代码结构

事务通常是以BEGIN TRANSACTION开始,以COMMIT或ROLLBACK结束。
COMMIT–>提交事务的所有操作,也就是将事务中所有对数据库的操作写到磁盘上的物理数据库中去,事务正常结束。
ROLLBACK–>回滚,即在事务运行的过程中发生了某种故障或异常,事务不能继续执行,系统将事务中对数据库的所有已完成的操作全部撤回,滚回到事务开始的状态。

3.事务的特性(ACID)

原子性(Atomicity)
事务是数据库逻辑单元,事务中的操作要么都做,要么都不做。
一致性(Consistency)
事务的处理结果必须是使数据库从一个一致性状态变为另一个一致性状态。一致性与原子性是密切相关的。
隔离性(Isolation):
一个事务的执行不能受其它事务的干扰。
永久性(Durability):
一旦事务提交,它对数据库的修改一定是永久性的。

4.事务隔离级别

事务的隔离级别从低到高为:
Read uncommitted(读未提交)
隔离级别最低。当一个事务A还未提交,事务B读取了事务A待提交的数据,当事务A发现错误,然后修改数据回滚之后,事务B那一次的读取就是错误的,就出现了脏读。
Read committed(读提交)
此级别可避免脏读。事务A事先读取了数据,事务B也同时读取了数据,更新数据并提交了。当事务A再次读取数据时,数据已经发生了改变。虽然避免了脏读,但是可能造成不可重复读。
Repeatable read(重复读)
可以避免不可重复读。也就是当事务A在读的时候,事务B就不能读取该数据。但该级别可能会出现幻读。MySql的默认级别就是这个。
Serializable(序列化)
Serializable是隔离级别最高的,同时花的代价也高,性能很低,在该级别下事务顺序执行。可避免以上级别可能出现的脏读、重复读、幻读。

0 0
原创粉丝点击