李歘歘的朋友圈

李歘歘的朋友圈

专注于计算机知识分享

MySQL数据库——常见的几种锁分类
MySQL

MySQL数据库——常见的几种锁分类

大家好,这里是编程Cookbook。本文详细介绍MySQL的几种常见锁分类,如:表级锁、行级锁、页面锁、悲观锁、乐观锁、共享锁、排他锁、Gap-锁等。 按锁粒度分 表级锁 * 开销小,加锁快,不会出现死锁,锁粒度大(整张表)。 * 并发度低,发生锁竞争概率大,适合查询。 行级锁 * 开销大,加锁慢,会出现死锁,锁粒度最小(一行数据)。 * 并发度高,发生锁竞争概率小,适合并发写,事务控制。 页面锁 * 开销、加锁速度、锁粒度、并发度都介于表级锁和行级锁之间,会出现死锁。 总结 很难说哪种锁更好,只能根据具体应用程序的特点选择合适的锁。 * 对于查询远大于修改的场景,表级锁是合适的,因为锁粒度大但管理简单。 * 对于并发查询并发更新少量数据的应用,行级锁是更合适的选择,它提供更高的并发性和灵活性。 InnoDB的默认锁是行级锁,但通过意向锁机制实现了多粒度锁的协同工作。 锁与索引关系
15 min read
MySQL数据库——存储引擎(InnoDB、MyISAM、MEMORY、ARCHIVE)
MySQL

MySQL数据库——存储引擎(InnoDB、MyISAM、MEMORY、ARCHIVE)

大家好,这里是编程Cookbook。本文详细介绍MySQL数据库重要的存储引擎及其适用场景:InnoDB、MyISAM、MEMORY、ARCHIVE。 MySQL的存储引擎(Storage Engine)是用于管理数据存储和数据访问的程序模块。常用的存储引擎有 InnoDB(事务处理和高并发,默认存储引擎)、MyISAM(高查询性能,但不支持事务)、Memory(高速缓存)等。 * InnoDB:适用于大多数业务场景,提供事务、行级锁和外键支持,是MySQL的默认存储引擎。 * MyISAM:适用于读多写少、对事务一致性要求不高的场景。 * MEMORY:适用于需要高速缓存的场景,但数据会在数据库重启时丢失。 * ARCHIVE:适用于存储大量归档数据,不支持更新操作。 * CSV:适用于导出和交换数据的场景,数据以CSV格式存储。 * NDB (Cluster):适用于分布式、高可用性和高扩展性的场景,通常用于MySQL Cluster。 * FEDERATED:适用于跨数据库查询,允许访问远程数据库中的数据。 * BLACKHOLE:适用于数据复制,
11 min read
MySQL数据库——数据库三范式
MySQL

MySQL数据库——数据库三范式

大家好,这里是编程Cookbook。本文简要介绍关系型数据库设计的三范式。 数据库的三范式(3NF)是关系数据库设计中用于减少数据冗余、避免数据异常和提高数据一致性的三种规范化标准。 以下是 第一范式(1NF)、第二范式(2NF) 和 第三范式(3NF) 的详细介绍: 范式 第一范式(1NF) 要求每一列都是不可拆分的原子项。 第二范式(2NF) 第二范式要求属性完全依赖于主键,而不能只依赖于主键的一部分。满足 第一范式 的基础上,解决部分依赖(Partial Dependency)的问题。 * 关系必须满足 第一范式。 * 消除部分依赖:对于复合主键(即由多个列组成的主键),非主属性必须依赖于整个复合主键,而不是依赖于主键的一部分。 订单表中出现业务线,不同业务线的订单价格不同,那么主键就必须是订单id和业务线id(完全依赖)。 第三范式(3NF) 第三范式要求属性直接依赖于主键,不依赖于通过其他非主属性间接依赖于主键。 * 关系必须满足 第二范式。 * 消除传递依赖:任何非主属性都不能通过其他非主属性间接依赖
3 min read