随笔分类 -  Mysql

摘要:在MySQL中,主键索引和普通索引有以下主要区别: 1、唯一性:主键索引是唯一的,每个表只能有一个主键。这意味着主键的值在表中必须是唯一的。另一方面,普通索引允许在表中创建多个,并且索引的值也可以重复。 2、自动创建:当你在创建表时为某个字段设置为主键时,MySQL会自动为主键字段创建主键索引。但是 阅读全文
posted @ 2025-03-29 12:42 Zero&&One 阅读(146) 评论(0) 推荐(0)
摘要:JDK的乐观锁(CAS)和MySOL的乐观锁实现有一些区别,主要体现在以下几个方面 实现方式:JDK的乐观锁是通过原子类中的compareAndset()方法实现的,该方法使用CAS(Compare-and Swap)操作来保证原子性。而MYSQL的乐观锁通常是通过在数据库表中添加一个version 阅读全文
posted @ 2025-03-29 12:29 Zero&&One 阅读(19) 评论(0) 推荐(0)
摘要:在InnoDB存储引擎下,当你在一张表上建立了一个联合索引,并且查询时命中了这个索引,InnoDB会尽量使用这个索引来加速查询,然而,InnoDB是否走索引取决于多种因素,包括查询条件、索引覆盖情况以及优化器的选择等。 在以下情况下,InnoDB会选择走索引: 1、索引覆盖:如果查询条件只涉及到联合 阅读全文
posted @ 2025-03-29 11:57 Zero&&One 阅读(29) 评论(0) 推荐(0)
摘要:读未提交下: 增:插入数据后,给新插入的数据上记录锁,防止其它事务更改这条记录 删:需要获取到要删除的记录的记录锁,保证删除的时候其它事务没在使用这些数据,并保证删除后其它事务无法对这些数据进行操作 改:给需要更改的数据上记录锁 查:普通select不上锁,直接读最新数据,不管是否提交,select 阅读全文
posted @ 2025-03-29 01:03 Zero&&One 阅读(38) 评论(0) 推荐(0)
摘要:更新操作怎么上锁? 例如有字段a,b,c,其中a,b字段上有索引 update table set a = 1 where a = 2; 该SQL会先去a索引获取锁,然后去聚集索引获取锁,全部获取到后进行更新,不会去b索引上获取锁,因为该SQL没有更新b索引上数据(b索引的叶子节点数据只有b和id) 阅读全文
posted @ 2025-03-29 01:01 Zero&&One 阅读(88) 评论(0) 推荐(0)
摘要:1、第一步开启一个事务 2、接下来update SQL放往MySQL服务器层,然后经过SQL解析、词法分析和语法分析、查询优化等步骤,最终生成一个物理执行计划 3、MySQL执行器调用InnoDB引擎接口进行后面修改操作 4、在修改数据前需要先把数据查出来 5、把需要修改的数据行查出来之后,需要进行 阅读全文
posted @ 2025-03-27 11:58 Zero&&One 阅读(21) 评论(0) 推荐(0)
摘要:分析查询语句:使用EXPLAIN命令分析SQL执行计划,找出慢查询的原因,比如是否使用了全表扫描,是否存在索引未被利用的情况等,并根据相应情况对索引进行适当修改。 创建或优化索引:根据查询条件创建合适的索引,特别是经常用于WHERE子句的字段、Orderby 排序的字段、Join 连表查询的字典、 阅读全文
posted @ 2025-03-19 17:45 Zero&&One 阅读(39) 评论(0) 推荐(0)
摘要:行级锁 MySQL 行锁是一种在数据库表中针对单个行记录进行锁定的机制,用于实现并发控制,确保在同一时间只有一个事务可以对特定的行进行修改,从而避免数据冲突和不一致性。 记录锁(Record Lock): 锁住某行记录,分为读写锁,事务提交后自动释放,例如select * from table_na 阅读全文
posted @ 2025-03-18 11:18 Zero&&One 阅读(43) 评论(0) 推荐(0)
摘要:1.连接器:建立连接,管理连接、校验用户身份; 2,查询缓存:查询语句如果命中查询缓存则直接返回,否则继续往下执行。MySQL8.0已删除该模块; 3,解析SQL:通过解析器对SQL查询语句进行词法分析、语法分析,然后构建语法树,方便后续模块读取表名、字段、语句类型 4,执行SQL:执行SQL共有三 阅读全文
posted @ 2025-03-18 11:09 Zero&&One 阅读(27) 评论(0) 推荐(0)
摘要:MySQL在执行SELECT语句时,遵循特定的执行顺序。以下是SELECT语句的执行步骤: FROM 子句:FROM子句是SQL语句的起点,决定了查询的数据源。在这一步,MySQL会确定查询的数据表 JOIN 操作:如果查询中包含多个表的联接操作,MySQL会在FROM子句后执行联接操作。 WHER 阅读全文
posted @ 2025-03-18 11:07 Zero&&One 阅读(55) 评论(0) 推荐(0)
摘要:读未提交下: 增:插入数据后,给新插入的数据上记录锁,防止其它事务更改这条记录 删:需要获取到要删除的记录的记录锁,保证删除的时候其它事务没在使用这些数据,并保证删除后其它事务无法对这些数据进行操作 改:给需要更改的数据上记录锁 查:普通select不上锁,直接读最新数据,不管是否提交,select 阅读全文
posted @ 2025-03-18 11:05 Zero&&One 阅读(27) 评论(0) 推荐(0)
摘要:MySQL服务端是允许多个客户端连接的,这意味着 MySQL 会出现同时处理多个事务的情况。 那么在同时处理多个事务的时候,就可能出现 脏读(dirtyread):如果一个事务「读到」了另一个「「未提交事务修改过的数据,就意味着发生了「脏读」现象。 不可重复读(non-repeatableread) 阅读全文
posted @ 2025-03-18 11:02 Zero&&One 阅读(47) 评论(0) 推荐(0)
摘要:InnoDB引擎支持的数据库查数据时,默认是锁行 在使用 InnoDB 引擎的 MySQL 查询数据时,默认情况下 是锁行,而不是锁表。InnoDB 引擎支持 行级锁,它会尽可能地使用行级锁来提高并发性能,避免不必要的锁竞争和死锁。 不过,具体会锁表还是锁行取决于以下几个因素: 1. 普通 SELE 阅读全文
posted @ 2025-03-18 10:52 Zero&&One 阅读(116) 评论(0) 推荐(0)
摘要:1、唯一索引等值查询 当我们用唯一索引进行等值查询的时候,查询的记录存不存在,加锁的规则也会不同: 当查询的记录是「存在」的,在索引树上定位到这一条记录后,将该记录的索引中的 next-key lock 会退化成「记录锁」。 当查询的记录是「不存在」的,在索引树找到第一条大于该查询记录的记录后,将该 阅读全文
posted @ 2025-03-18 10:51 Zero&&One 阅读(21) 评论(0) 推荐(0)
摘要:MVCC允许多个事务同时读取同一行数据,而不会彼此阻塞,每个事务看到的数据版本是该事务开始时的数据版本。这意味着,如果其他事务在此期间修改了数据,正在运行的事务仍然看到的是它开始时的数据状态,从而实现了非阻塞读操作。 多版本并发控制,存在于读已提交与可重复读两个隔离级别下。读未提交下直接读最新的数据 阅读全文
posted @ 2025-03-16 09:44 Zero&&One 阅读(67) 评论(0) 推荐(0)