短视频
来源:短视频
MySql在什么情况会加锁?有哪些锁
在 MySQL 中,加锁的情况主要包括以下几种:
事务中的写操作: 当一个事务执行更新操作(如 INSERT、UPDATE、DELETE)时,MySQL 会自动对涉及的数据行加上排他锁,防止其他事务对相同数据行进行修改,直到事务提交或回滚。
隐式锁定: 在某些查询中,MySQL 会自动对涉及的数据行进行隐式的锁定,以确保查询结果的一致性。例如,在使用 SELECT ... FOR UPDATE 查询时,MySQL 会对查询结果中的数据行加上排他锁,以防止其他会话修改这些数据。
显式锁定: 通过 LOCK TABLES 和 UNLOCK TABLES 命令可以对整个表进行显式的锁定和解锁操作。这种方式一般用于需要对整个表进行读写操作的场景,不常用于生产环境中。
表级锁:在事务操作中对整个表进行加锁。当一个事务对表进行写入操作时,其他事务无法对该表进行任何读写操作。表级锁通常是针对特定的DDL操作或备份操作。
共享锁:也称为读锁(Read Lock),用于允许多个事务同时读取同一资源,但禁止并发写入操作。其他事务可以获取共享锁,但无法获取排他锁。
排他锁:也称为写锁(Write Lock),用于独占地锁定资源,阻止其他事务的读写操作。其他事务无法获取共享锁或排他锁,直到持有排他锁的事务释放锁。
行级锁:也称为记录锁(Record Locking),在事务操作中对数据行进行加锁。行级锁可以控制并发读写操作,不同事务之间可以并发地访问不同行的数据。MySQL的InnoDB存储引擎默认使用行级锁。
记录锁:用于行级锁的一种形式,锁定数据库中的一个记录(行)以保证事务的隔离性和完整性。
间隙锁:用于行级锁的一种形式,锁定两个记录之间的间隙。它可以防止其他事务在该间隙中插入新记录,从而保证数据的一致性。
临键锁: 临键锁是记录锁和间隙锁的结合,锁定的是一个范围,并且包括记录本身。