美化wordpress后台,宁波seo优化,万能推广app,域名注册网站的域名哪里来的数据库锁机制
数据库锁主要分为三大类
1.全局锁
2.表级锁
3.行级锁
全局锁 定义#xff1a;全局锁是对整个数据库实例加锁#xff0c;禁止所有对数据库的写操作。 用途#xff1a;主要用于备份和维护操作。 示例 MySQL FLUSH TABLES WITH READ LOCK;这条命令会锁定所…数据库锁机制
数据库锁主要分为三大类
1.全局锁
2.表级锁
3.行级锁
全局锁 定义全局锁是对整个数据库实例加锁禁止所有对数据库的写操作。 用途主要用于备份和维护操作。 示例 MySQL FLUSH TABLES WITH READ LOCK;这条命令会锁定所有表只允许读操作禁止写操作。 解锁 UNLOCK TABLES;表级锁 定义表级锁是对整个表加锁限制对表的并发访问。 用途适用于低并发场景管理开销较小。 表级锁分为读锁和写锁 读锁共享锁S 锁 定义允许多个事务同时读取同一张表但不允许任何事务对该表进行写操作。用途适用于读多写少的场景确保数据的一致性。特点多个读锁可以共存。读锁与写锁互斥即一个表上有读锁时不能加写锁。 LOCK TABLES table_name READ;这条命令会对指定表加共享锁允许多个事务读取但禁止写操作。 写锁排他锁X 锁 定义只允许一个事务对表进行读取和写操作排除其他事务的任何访问。用途适用于写多读少的场景确保数据的独占性。特点排他锁与其他任何类型的锁互斥即一个表上有写锁时不能加任何其他锁。 LOCK TABLES table_name WRITE;这条命令会对指定表加排他锁只允许一个事务读写禁止其他事务访问。 元数据锁Metadata LockMDL 定义元数据锁用于保护表的元数据如表结构、索引等防止在事务执行过程中表结构被修改。用途确保在事务执行期间表的结构不会发生变化防止数据不一致。特点元数据锁分为读锁和写锁。读锁允许多个事务同时读取元数据但不允许修改。写锁只允许一个事务修改元数据排除其他事务的任何访问。 读元数据锁 SELECT * FROM table_name;写元数据锁 ALTER TABLE table_name ADD COLUMN new_column INT;自增锁Auto-Increment Lock 定义自增锁用于管理自增列AUTO_INCREMENT的值分配确保在并发插入时自增值的唯一性和连续性。用途防止多个事务同时插入自增列时产生冲突。特点自增锁在插入新记录时自动加锁确保自增值的分配。InnoDB 存储引擎提供了多种自增锁模式可以通过配置参数调整。 插入新记录时自动加锁 INSERT INTO table_name (column1, column2) VALUES (value1, value2);InnoDB 存储引擎提供了以下几种自增锁模式可以通过配置参数 innodb_autoinc_lock_mode 调整 传统模式Traditional Mode0 插入每一条记录时都会加表级锁确保自增值的连续性。 适用于需要严格连续自增值的场景。 示例 SET GLOBAL innodb_autoinc_lock_mode 0;连续模式Consecutive Mode1 插入一批记录时加一次表级锁确保自增值的连续性。 适用于大多数场景平衡了性能和连续性。 示例 SET GLOBAL innodb_autoinc_lock_mode 1;交错模式Interleaved Mode2 插入每一条记录时不加表级锁自增值可能不连续。 适用于高性能场景牺牲了自增值的连续性。 示例 SET GLOBAL innodb_autoinc_lock_mode 2;解锁 UNLOCK TABLES;行级锁 定义行级锁是对表中的单个行加锁限制对特定行的并发访问。 用途适用于高并发场景管理开销较大但并发性能更高。 行级锁的类型更为多样主要包括记录锁、间隙锁、临键锁等。 记录锁Record Lock 定义锁定索引记录本身。用途确保对特定行的独占访问。特点只锁定索引记录不影响其他行。适用于高并发场景减少锁的竞争。 SELECT * FROM table_name WHERE id 1 FOR UPDATE;这条命令会对查询结果中的行加排他锁确保在事务提交前其他事务不能修改这些行。 间隙锁Gap Lock 定义锁定索引记录之间的间隙。用途防止其他事务在该间隙内插入新记录。特点间隙锁不锁定具体的记录而是锁定记录之间的空隙。适用于防止幻读Phantom Read。 SELECT * FROM table_name WHERE id 10 AND id 20 FOR UPDATE;这条命令会对 id 在 10 和 20 之间的间隙加锁防止其他事务插入新的记录。 临键锁Next-Key Lock 定义记录锁和间隙锁的组合锁定索引记录及其之前的间隙。用途确保对特定行及其之前间隙的独占访问。特点临键锁不仅锁定记录本身还锁定记录之前的间隙。适用于防止幻读和不可重复读Non-Repeatable Read。 SELECT * FROM table_name WHERE id 10 FOR UPDATE;这条命令会对 id 为 10 的记录及其之前的间隙加锁确保在事务提交前其他事务不能修改这些行或插入新的记录。 总结 表级锁 读锁共享锁S 锁允许多个事务同时读取同一张表但不允许写操作。 写锁排他锁X 锁只允许一个事务对表进行读取和写操作排除其他事务的任何访问。 元数据锁Metadata LockMDL保护表的元数据防止在事务执行过程中表结构被修改。 自增锁Auto-Increment Lock管理自增列的值分配确保在并发插入时自增值的唯一性和连续性。 行级锁 记录锁Record Lock锁定索引记录本身确保对特定行的独占访问。 间隙锁Gap Lock锁定索引记录之间的间隙防止其他事务在该间隙内插入新记录。 临键锁Next-Key Lock记录锁和间隙锁的组合锁定索引记录及其之前的间隙确保对特定行及其之前间隙的独占访问。 InnoDB 存储引擎 InnoDB 默认使用行级锁
InnoDB 与 MyISAM 的区别
锁机制 InnoDB 支持行级锁适用于高并发场景。 支持事务和外键约束确保数据的一致性和完整性。 使用多版本并发控制MVCC提高并发性能。 MyISAM 支持表级锁适用于低并发场景。 不支持事务和外键约束适合简单的读写操作。 不支持 MVCC性能较低。
事务支持 InnoDB 支持事务可以回滚和提交事务。 支持 ACID原子性、一致性、隔离性、持久性特性。 MyISAM 不支持事务没有回滚和提交操作。 不支持 ACID 特性。
外键约束 InnoDB 支持外键约束确保数据的引用完整性。 MyISAM 不支持外键约束。
存储方式 InnoDB 使用聚集索引主键索引和数据存储在一起。 支持全文索引。 MyISAM 使用非聚集索引索引和数据分开存储。 支持全文索引。
性能 InnoDB 适用于高并发读写操作性能较好。 支持并发插入和更新操作。 MyISAM 适用于低并发读操作性能较低。 插入和更新操作可能会导致表锁竞争。