Mysql基础知识点
文章平均质量分 84
mysql
Java程序员廖志伟
我是廖志伟,一名Java开发工程师、Java领域优质创作者、CSDN博客专家、51CTO专家博主、阿里云专家博主等头衔。拥有多年一线研发和团队管理经验,研究过主流框架的底层源码(Spring、SpringBoot、Spring MVC、SpringCloud、Mybatis、Dubbo、Zookeeper),消息中间件底层架构原理(RabbitMQ、RocketMQ、Kafka)、Redis缓存、MySQL关系型数据库、 ElasticSearch全文搜索、MongoDB非关系型数据库、ShardingSphere分库分表读写分离、设计模式、领域驱动DDD、容器编排Kubernetes等。
展开
-
【count(列名)、count(1)和 count(星号)有什么区别】
在本文中,我们介绍了count()函数的三种不同用法,即count(列名)count(1)和count(*)。count(列名)函数返回指定列中非空值的行数。count(1)函数返回表中的所有行数,无论是否存在空值。count(*)函数用于计算表中的所有行数,无论这些行是否包含空值。这三种用法都有各自的优缺点。如果你只需要计算特定列的行数,则可以使用count(列名)函数。如果你需要计算所有列的行数,则应该使用count(1)或count(*)函数。另外,由于count(1)和count(*)原创 2023-07-25 08:55:42 · 350 阅读 · 0 评论 -
【并发事务会产生哪些问题】
幻读是指在同一个事务内执行两次相同的查询语句,但结果集却不同,例如,事务T1首先查询一些数据,事务T2同时插入了一条符合此查询条件的记录,之后,事务T1再次执行相同的查询语句时,就会发现存在一个新的记录,这就是幻读。2.使用乐观锁:在读取数据时,先获取该行数据的版本号,之后在更新数据时,先检查当前版本号是否与读取时的版本号一致,如果一致,则说明该行数据未被其他事务修改,可以进行更新操作,否则需要重新读取数据并进行相应操作。脏读指的是一个事务读取到了另一个事务未提交的数据,导致读到的数据是不正确的。原创 2023-07-21 19:45:00 · 1048 阅读 · 0 评论 -
【MySQL的CheckPoint技术】
MySQL的 CheckPoint (CheckPoint)技术,又称" redo log"(Redo log),是 MySQL数据库的核心技术之一,其目的是在发生故障或故障时,保证数据库中存储的数据可以得到有效的修复。对数据库进行的修改,包括写入,更新,删除等,都要进行相应的文档化,以确保数据在任何时候都是一致的。MySQL的 CheckPoint技术可以在一个服务器发生故障或者故障的时候,对 Redo日志中的每一个动作进行检测和播放,从而保证了数据的正常运行。原创 2023-06-12 21:57:54 · 307 阅读 · 0 评论 -
【行锁及其算法、死锁、意向锁】
InnoDB存储引擎有3种行锁的算法,其分别是:❑Record Lock:单个行记录上的锁❑Gap Lock:间隙锁,锁定一个范围,但不包含记录本身❑Next-Key Lock∶Gap Lock+Record Lock,锁定一个范围,并且锁定记录本身Record Lock总是会去锁住索引记录,如果InnoDB存储引擎表在建立的时候没有设置任何一个索引,那么这时 InnoDB存储引擎会使用隐式的主键来进行锁定。 Next-Key Lock是结合了Gap Lock和Record Lock的一种锁定算法,在原创 2022-06-03 08:49:12 · 606 阅读 · 3 评论 -
【MySQL调优、分库分表、读写分离、高可用】
第一步,从初期的一个需求规划,也就是对表的设计就开始了,我们在设计表的时候,尽量减少单行数据的大小,字段的宽度设得尽可能小,尽可能不用text、Blob、Clob等类型,它会增加存储空间的占用,读取速度较慢。能用数字型字段就不要设计为字符型,因为字符型锁占的存储空间更大,比如,性别这个字段不用男女进行存储,改为0/1的方式,这样不仅可以控制数据量的大小,增加了同一高度下的B+树容纳的数据量,还能提高检索速度。尽量使用varchar/nvarchar代替char/nchar,因为变长字段空间小,可以节省存储空原创 2022-06-02 23:45:29 · 609 阅读 · 8 评论 -
【Innodb 和mylsam存储引擎】
Innodb 和mylsam存储引擎的主要区别原创 2022-06-02 23:51:34 · 390 阅读 · 1 评论 -
【ACID底层实现原理、一致性非锁定读(MVCC的原理)、BufferPool缓存机制、重做日志刷盘策略、隔离级别】
A(原子性),要么全部完成,要么完全不起作用。底层实现是通过undo log日志去实现的,当这个事务对数据库进行修改的时候,innodb 生成对应undo log,undolog有多个版本,并且存放的是与上一个版本相反的操作,他会记录这个SQL执行的相关信息,如果SQL执行失败发生回滚,innodb 根据这个undo log内容去做相反的工作,比如说我执行了一个insert 操作,那么回滚的时候,就会执行一个相反的操作,就是delete,对应update,回滚的时候也是执行相反的update。这就是原子性的原创 2022-06-02 23:29:31 · 839 阅读 · 4 评论 -
【redo log、bin log、undolog、purge操作、group commit】
一致性的非锁定读(consistent nonlocking read)是指InnoDB存储引擎通过行多版本控制(multi versioning)的方式来读取当前执行时间数据库中行的数据。如果读取的行正在执行DELETE或UPDATE操作,这时读取操作不会因此去等待行上锁的释放。相反地,InnoDB存储引擎会去读取行的一个快照数据。之所以称其为非锁定读,因为不需要等待访问的行上X锁的释放。快照数据是指该行的之前版本的数据,该实现是通过undo段来完成。而undo用来在事务中回滚数据,因此快照数据本身是没有原创 2022-06-02 22:30:16 · 557 阅读 · 11 评论 -
【MySQL的分布式事务】
InnoDB存储引擎提供了对XA事务的支持,并通过XA事务来支持分布式事务的实现。分布式事务指的是允许多个独立的事务资源(transactional resources)参与到一个全局的事务中。事务资源通常是关系型数据库系统,但也可以是其他类型的资源。全局事务要求在其中的所有参与的事务要么都提交,要么都回滚,这对于事务原有的ACID要求又有了提高。另外,在使用分布式事务时,InnoDB存储引擎的事务隔离级别必须设置为SERIALIZABLE。XA事务允许不同数据库之间的分布式事务,如一台服务器是MySQL数原创 2022-06-02 20:31:37 · 685 阅读 · 2 评论 -
【SQL的执行流程】
第一步,先连接到这个数据库上,这时候接待你的就是连接器。连接器负责跟客户端建立连接、获取权限、维持和管理连接。用户名密码认证通过,连接器会到权限表里面查出你拥有的权限。一个用户成功建立连接后,即使你用管理员账号对这个用户的权限做了修改,也不会影响已经存在连接的权限。修改完成后,只有再新建的连接才会使用新的权限设置。连接完成后,如果你没有后续的动作,这个连接就处于空闲状态,你可以在 show processlist 命令中看到它。客户端如果长时间不发送command到Server端,连接器就会自动将它断开。这原创 2022-06-02 20:26:18 · 449 阅读 · 2 评论 -
【主从复制】
复制(replication)是MySQL数据库提供的一种高可用高性能的解决方案,一般用来建立大型的应用。总体来说,replication的工作原理分为以下3个步骤:1)主服务器(master)把数据更改记录到二进制日志(binlog)中。2)从服务器(slave)把主服务器的二进制日志复制到自己的中继日志(relaylog)中。3)从服务器重做中继日志中的日志,把更改应用到自己的数据库上,以达到数据的最终一致性。复制的工作原理并不复杂,其实就是一个完全备份加上二进制日志备份的还原。不同的是这个二进制日志的原创 2022-06-02 20:15:46 · 476 阅读 · 2 评论 -
【离散读、ICP优化、全文检索】
在某些情况下,当执行EXPLAIN命令进行SQL语句的分析时,会发现优化器并没有选择索引去查找数据,而是通过扫描聚集索引,也就是直接进行全表的扫描来得到数据。这种情况多发生于范围查找、JOIN链接操作等情况下。假设表:t_index 。其中 id 为主键;c1 与 c2 组成了联合索引(c1,c2);此外,c1还是一个单独索引。进行如下查询操作:SELECT*FROMt_ index WHERE c1>1andc1<100000;可以看到表t_index有(c1,c2)的联合主键,此外还有对于列c1的单原创 2022-06-02 19:01:43 · 495 阅读 · 2 评论 -
【聚集索引、辅助索引、覆盖索引、联合索引、filesort过程】
InnoDB存储引擎表是索引组织表,即表中数据按照主键顺序存放。而聚集索引(clusteredindex)就是按照每张表的主键构造一棵B+树,同时叶子节点中存放的即为整张表的行记录数据,也将聚集索引的叶子节点称为数据页。每个数据页都通过一个双向链表来进行链接由于实际的数据页只能按照一棵B+树进行排序,因此每张表只能拥有一个聚集索引。在多数情况下,查询优化器倾向于采用聚集索引。因为聚集索引能够在B+树索引的叶子节点上直接找到数据。此外,由于定义了数据的逻辑顺序,它对于主键的排序查找和范围查找速度非常快。叶子节原创 2022-06-02 17:43:48 · 1135 阅读 · 10 评论 -
【SQL优化/索引失效的几种情况/FIC/OnlineDDL】
SQL优化/索引失效的几种情况/FIC/OnlineDDL原创 2022-06-02 17:23:43 · 772 阅读 · 5 评论 -
【索引数据结构】
mysql是从磁盘读取数据到内存的,是以磁盘块为基本单位的,位于同一磁盘块中的数据会被一次性读取出来,不是按需读取。以InnoDB存储引擎来说,它使用页作为数据读取单位,页是其磁盘管理的最小单位,默认大小是16kb。系统的一个磁盘块的存储空间往往没有这么大,所以InnoDB每次申请磁盘空间时都会是多个地址连续磁盘块来达到页的大小16KB。在查询数据时一个页中的每条数据都能定位数据记录的位置,这会减少磁盘 I/O 的次数,提高查询效率。InnoDB存储引擎在设计时是将根节点常驻内存的,力求达到树的深度不超过.原创 2022-05-30 14:08:40 · 383 阅读 · 4 评论