摘要:
多版本并发控制(Multi-Version Concurrency Control)是MySQL的InnoDB引擎实现隔离级别的一种具体方式。 它可以实现提交读和可重复读两种级别的隔离。 未提交读太简单,不需要用MVCC,可串行化太难,只用MVCC解决不了。 MVCC的基本思想: 在读写锁中,读和读 阅读全文
摘要:
未提交读 Read Uncommitted 事务中的修改,即使未提交,对其他事务也是可见的。 提交读 Read Committed 一个事务只能读取已经提交的事务所做的修改。 可重复读 Repeatable Read 保证在同一事务中多次读取同一数据时结果都是相同的。 可串行化 Serializab 阅读全文
摘要:
1.三级封锁协议 一级封锁协议 事务在修改数据时必须先加X锁,在事务结束之后释放X锁。 这样可以解决丢失修改的问题。因为不能有两个事务同时修改同一个数据,所以不会有修改被覆盖的问题。 二级封锁协议 在一级的基础上,要求读取数据A之前必须加上S锁,读取A之后立即释放S锁。 这样可以解决读脏数据的问题。 阅读全文
摘要:
1.读写锁 互斥锁(Exclusive),简写为X锁,又称为写锁。 共享锁(Shared),简写为S锁,又称为读锁。 对X锁和S锁有两个规定: ①一个事务对数据对象A加了X锁,那么就可以对A进行读取和更新。加锁期间其他事务不能对A加任何形式的锁。 ②一个事务对数据对象A加了S锁,可以对A进行读取操作 阅读全文
摘要:
一、封锁粒度 MySQL提供了两种封锁粒度:行级锁和表级锁。 行级锁是单独的一行数据加锁,其他进程还是可以对同一个表中的其他行数据进行修改。 表级锁是对整个表加锁,在锁定期间,其他进程无法对该表进行写操作。 选择封锁粒度的原则: 应该尽量只锁定需要修改的那部分数据,而不是所有资源。锁定的数据量越小, 阅读全文
摘要:
在并发环境下,事务间的隔离性很难保证,因此会出现并发一致性问题。 并发一致性问题主要有四类,即:丢失修改问题,读脏数据问题,不可重复读问题,幻影读问题。 ①丢失修改问题:T1和T2两个事务都对同一数据进行修改,T1先修改,T2随后修改,T2的修改覆盖了T1的修改。 ②读脏数据问题:T1修改了一个数据 阅读全文
摘要:
事务是指满足ACID特性的一组操作语句。这组语句要么全部成功,要么全部失败。组内一个语句失败时,全部操作都会失败。可以通过commit提交一个事务,也可以通过rollback回滚,回滚可以反向执行对数据库的修改操作。 所谓的ACID特性是指: Atomicity原子性:事务被视为不可分割的最小单位, 阅读全文
摘要:
C++支持多继承,由此引发错综复杂的命名冲突问题,这时需要虚继承的概念解决这些问题。在C++之后的Java不支持多继承,因此没有这些问题。 多继承是指从多个直接基类中产生派生类的方法,多继承的派生类继承了所有父类成员。多个基类相互交织产生了错综复杂的设计问题,命名冲突就是其中一个。以典型的菱形继承为 阅读全文
摘要:
静态数据成员 有时候需要为某个类的所有对象分配一个单一的存储空间。使用全局变量的缺点显而易见,它可以被任意修改,而且很容易发生名字冲突。我们希望的是把数据当成全局变量那样去存储,但又隐藏在类的内部,而且又与这个类相联系。这个其实可以用静态数据成员来实现。 类的静态数据成员拥有一块单独的存储区,不管该 阅读全文
摘要:
1.定义一个单例类,其构造函数是私有的, 2.使用类的私有静态指针变量指向类的唯一实例, 3.并用一个公有的静态方法来获取该实例。 单例模式的作用就是保证在整个应用程序的生命周期中的任何一个时刻,单例类的实例都只存在一个(也可以不存在)。 单例模式通过类本身来管理其唯一的实例,唯一的实例是类的一个普 阅读全文