Mysql事务与锁深入剖析
1、什么是数据库事务?
事务(Transaction)是并发控制的单位,是用户定义的一个操作序列。这些操作要么都做,要么都不做,是一个不可分割的工作单位。通过事务,SQL Server能将逻辑相关的一组操作绑定在一起,以便服务器保持数据的完整性。
事务通常是以BEGIN TRANSACTION开始,以COMMIT或ROLLBACK结束。
COMMIT表示提交,即提交事务的所有操作。具体地说就是将事务中所有对数据库的更新写回到磁盘上的物理数据库中去,事务正常结束。
ROLLBACK表示回滚,即在事务运行的过程中发生了某种故障,事务不能继续进行,系统将事务中对数据库的所有以完成的操作全部撤消,滚回到事务开始的状态。
事务的特性(ACID特性)
A:原子性(Atomicity)
事务是数据库的逻辑工作单位,事务中包括的诸操作要么全做,要么全不做。
B:一致性(Consistency)
事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
C:隔离性(Isolation)
一个事务的执行不能被其他事务干扰。
D:持续性/永久性(Durability)
一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。
数据库事务分为:自动和手动开启。
数据库默认开启事务:=ON
手动开启事务:begin;start transaction;
手动结束事务:commit;rollback;此时锁要释放。
事务并发的三大问题:
(1)不可以重复读(已提交,update、delete):
(2)幻读(已提交,insert):
(3)脏读(未提交,回滚了):
丢失更新:
数据库默认实现:可重复读。
意向表锁,就是意向标志。
原因就是大大提升加锁效率。
字符可以排序,通过ASCII码。
默认上面这个。
有哪些存储引擎是支持事务的?
InnoDB BDB:支持
MyISAM:不支持
一致性:主要指业务的一致性。