一、
1.事务是作为一个整体提交给数据库用于处理的工作单元(一个数据库的会话可能由一个或多个事务组成)。换种说法,事务是指一条或多条查询。在数据库中,这些查询作为一个整体,全部执行或全部不执行。
2.并发的事务的两种运行方式
A.串行(serially)。先后顺序。
B.交叉(interleaved)。轮流交替运行。(不明白)
3.不明白的例子:顾客购买同种图书,见《SQL语言详解》第3版P184。
相关概念:丢失更新(lost upda)
4.锁定
共享锁:允许多个事务查看数据库中的数据,但不允许在共享锁准备就绪时修改数据。
排他锁
锁的粒度:放置锁定的数据库元素的大小。粒度越小,能够锁定的”片“越多,同时能够支持的数据库使用的并发越多。(不懂)
两阶段锁定:当事务获取数据时,数据库管理系统会在相关数据上放置一个共享锁;仅在该事务需要修改数据时,才会将锁升级为排他锁。这就叫“两阶段锁定“。
我对共享锁的理解,正确性有待检测。
CMS中,存储文章数据的table,假设,后台有一个管理文章的列表,前台也有文章列表,前后台都从该table获取,前后台对该table的读取是两个不同的事务吗?若是,那么,该table是否被加了共享锁?当admin在后台删除或修改文章时,对该table的锁会自动升级为排他锁吗?若升级或人为加了排他锁,在同一时间,前台的文章列表是否必须等待后台对该table的事务结束了才能读取到文章数据?
二、隔离级别(完全不理解)
什么叫隔离?我这样理解,某事务中的数据库元素不能被被其他事务任意访问,但是可以被有条件地访问,这些条件,就是隔离级别。
1.四种事务隔离级别:
序列化(Serializable)
可重复读取(Repeatable Read):幻象读取(Phantom Read)
授权读取(Read Committed):不可重复读取(Nonrepeatable Read)
未授权读取(Read Uncommitted):脏读(dirty read)
2.设置隔离等级的语法
SET TRANSACTION
ISOLATION LEVEL isolation_level
例子:
SET TRANSACTION
ISOLATION LEVEL REPEATABLE READ;