事务就是作为一个逻辑工作单元的SQL语句,如果任何一个语句操作失败那么整个操作就被失败,以后操作就会回滚到操作前状态,或者是上个节点。为了确保要么执行,要么不执行,就可以使用事务。而锁是实现事务的关键,锁可以保证事务的完整性和并发性。
数据库中的锁也是为了解决在并发访问时出现各种冲突的一种机制
锁的目的是什么?
主要解决多个用户同时对数据库的并发操作时会带来以下数据不一致的问题:
- 丢失更新,同时修改一条数据
- 读脏,A修改了数据后,B读取后A又取消了修改,B读脏
- 不可重复读,A用户读取数据,随后B用户读取该数据并修改,此时A用户再读取数据时发现前后两次的值不一致
- 还有一种是幻读,这个情况好像不多。
并发控制的主要方法是封锁,锁就是在一段时间内禁止用户做某些操作以避免产生数据不一致
锁的粒度有哪些?
- 数据库锁:锁定整个数据库,这通常发生在整个数据库模式改变的时候。
- 表锁:锁定整个表,这包含了与该表相关联的所有数据相关的对象,包括实际的数据行(每一行)以及与该表相关联的所有索引中的键。
- 区段锁:锁定整个区段,因为一个区段由8页组成,所以区段锁定是指锁定控制了区段、控制了该区段内8个数据或索引页以及这8页中的所有数据行。
- 页锁:锁定该页中的所有数据或索引键。
- 行或行标识符:虽然从技术上将,锁是放在行标识符上的,但是本质上,它锁定了整个数据行。