数据库锁
在数据库中,锁(lock)是一种控制并发访问的机制,它用来确保在同一时间只有一个事务能够对某个数据资源进行读取或写入操作。
1.共享锁 Shared Lock
也称为读锁,多个事务可以同时获取该锁,用于并发读取数据。共享锁不阻塞其他事务的共享锁,但会阻塞独占锁。
2.独占锁 Exclusive Lock
也称为写锁,只有一个事务可以获取该锁,用于独占写入数据。独占锁会阻塞其他事务的共享锁和独占锁。
3.排他锁 Exclusive Lock
类似于独占锁,但是在某些数据库中具有更高的优先级,通常用于更新操作,可以防止其他事务同时获取独占或共享锁
4.记录锁 Record Lock
锁定表中的某一行或某些行,只有获取锁的事务可以访问或修改对应的行。
5.间隙锁 Gap Lock
锁定一个范围的键值,但不包括实际的数据行,用于防止其他事务在范围内插入新数据。
6.意向锁 Intent Lock
用于提高并发性能,指示事务将要对资源的子资源进行锁定,例如在表级别存在一个独占锁时,其他事务可以获取该表的共享意向锁而不必遍历全表进行加锁。
事物的四个隔离级别 记录:
1.读未提交(Read Uncommitted):最低的隔离级别,事务可以读取其他事务尚未提交的数据,可能导致脏读(Dirty Read),即读取到未提交的数据。
2.读已提交(Read Committed):事务只能读取其他已经提交的事务所做的更改,避免了脏读。但是在并发情况下,可能出现不可重复读(Non-repeatable Read),即前后两次读取同一数据的结果不一致。
3.可重复读(Repeatable Read):在一个事务中,多次读取同一数据的结果是一致的,即使其他事务对该数据进行了修改,当前事务读取到的仍然是事务开始时的值。这种隔离级别避免了脏读和不可重复读。
4.串行化(Serializable):最高的隔离级别,通过对事务进行串行执行来避免并发带来的问题。事务按顺序一个接一个执行,避免了脏读、不可重复读和幻读(Phantom Read,即一个事务多次查询同一范围的数据,但结果集却不同)。
一般来说,隔离级别越高,事务对并发性能的影响越大,因为需要使用锁来保证各种操作的顺序和一致性。因此,在设置隔离级别时需要根据具体的业务需求和性能要求进行权衡和选择。