MySQL数据库
文章平均质量分 86
记录MySQL数据库的学习过程
bugcoder-9905
长期更新学习笔记
展开
-
【MySQL】SQL优化
首先根据条件取出排序字段和行指针信息,然后在排序区 sort buffer 中排序,如果sort buffer不够,则在临时表 temporary table 中存储排序结果。如果应用使用自动提交的方式,建议在导入前执行 SET AUTOCOMMIT=0,关闭自动提交,导入结束后再执行 SET AUTOCOMMIT=1,打开自动提交,也可以提高导入的效率。通过创建合适的索引,能够减少 Filesort 的出现,但是在某些情况下,条件限制不能让Filesort消失,那就需要加快 Filesort的排序操作。原创 2023-10-17 19:52:06 · 229 阅读 · 0 评论 -
【MySQL】分析SQL的几种方式
完整的访问方法如下: system ,const ,eq_ref ,ref ,fulltext ,ref_or_null ,index_merge , unique_subquery ,index_subquery , range , index ,ALL。5) command列,显示当前连接的执行的命令,一般取值为休眠(sleep),查询(query),连接(connect)等。查看当前MySQL在进行的线程,包括线程的状态、是否锁表等,可以实时地查看 SQL 的执行情况,同时对一些锁表操作进行优化。原创 2023-10-17 11:41:49 · 835 阅读 · 1 评论 -
【MySQL】记录锁+间隙锁可以防止删除操作而导致的幻读吗?
当同一个查询在不同的时间产生不同的结果集时,事务中就会出现所谓的幻象问题。例如,如果 SELECT 执行了两次,但第二次返回了第一次没有返回的行,则该行是“幻像”行。只要 T1 和 T2 时刻执行产生的结果集是不相同的,那就发生了幻读的问题,比如:T1 时间执行的结果是有 5 条行记录,而 T2 时间执行的结果是有 6 条行记录,那就发生了幻读的问题。T1 时间执行的结果是有 5 条行记录,而 T2 时间执行的结果是有 4 条行记录,也是发生了幻读的问题。MySQL 是怎么解决幻读的?针对快照读。原创 2023-02-19 15:13:54 · 650 阅读 · 0 评论 -
【SQL】字符串处理函数
pos:规定字符串从何处开始往后截取,为正数时则从字段开始出开始,为负数则从结尾出开始,类似于python的负数索引。string:字符串表达式,它可以是列的名称、字符串字面值或另一个标量函数的结果,其中基础数据类型可以表示为任何字符类型(如CHAR或VARCHAR)left不填充字符串,如果count大于字符串中的字符数,则left返回整个字符串。len:要截取字符串的长度(是从1开始计数而不是0),不写默认截取到string末尾。count:整数,指定从字符串表达式的起始位置返回的字符数。原创 2022-12-19 20:14:50 · 930 阅读 · 0 评论 -
【SQL】排序与修改
使用update交换性别。原创 2022-12-14 17:38:11 · 285 阅读 · 0 评论 -
Windows安装MySQL8.0
进入页面后可以不登录。后点击底部“No thanks, just start my download.” 即可开始下载。下载地址:https://dev.mysql.com/downloads/file/?我这里是找不到指定文件,上网查询后,发现是自己以前安装过MySQL,系统记录着以前的路径。我们打开注册表,根据以下路径找到如图所示的位置,将路径改为当前mysqld的路径即可。在安装的bin目录下,以管理员身份运行cmd,执行以下命令。使用以下命令启动或关闭mysql服务。查看MySQL的默认用户。原创 2022-11-16 16:08:44 · 159 阅读 · 0 评论 -
MySQL 总结char与varchar的区别
简单的说,我们只是给其固定了一个最大值,然后系统会根据实际存储的数据量来分配合适的存储空间。varchar(M)定义的列的长度是可变长度字符串,在MySQL5.0以上的版本中,varchar的数据类型长度支持到了65535,因为起始位和结束位占去了3个字节,所以其用于存储数据的最大长度为65532字节(varchar的最大有效长度由最大行大小和使用的字符集确定)用户定义数据时,char和varchar类型长度表示想保存的最大字符数,其中char(M)定义的列的长度为固定的,M的取值可以0-255之间,转载 2022-11-15 17:59:56 · 1153 阅读 · 0 评论 -
MySQL 分库分表实践
一、为什么要分库分表二、库表太大产生的问题三、垂直拆分1. 垂直分库2. 垂直分表四、水平分库分表2. 测试水平分表原创 2022-04-07 11:31:44 · 5407 阅读 · 1 评论 -
MySQL 读写分离配置实践
一、环境准备1. 查看主从复制状态2. 查看JDK版本3. 打开root的远程连接权限4. 安装MyCat二、配置文件1. server.xml2. schema.xml三、启动服务1. 配置文件问题一2. 配置文件问题二四、MyCat 9066端口和8066端口1. 9066管理端口2. 8066数据端口五、验证读写分离1. 打开查询日志general_log2. 验证读操作在slave3. 验证写操作在master4. 验证容灾功能原创 2022-04-06 21:57:27 · 1450 阅读 · 1 评论 -
MySQL 读写分离原理
文章目录读写分离概念引入中间件MyCatMyCat服务端口和管理端口读写分离概念基于主从复制的读写分离,是我们在单机环境下,数据库的性能到瓶颈了,可以通过读写分离,提高后台服务。存储这一块的增删改查的并发的处理能力,主库专门负责写操作,从库专门负责读操作,主库的数据更改通过主从复制同步到从库读写分离就是在主服务器上修改,数据会同步到从服务器,从服务器只能提供读取数据,不能写入,实现备份的同时也实现了数据库性能的优化,以及提升了服务器安全MySQL client通过mysql 提供的API,用mys原创 2022-04-06 16:24:57 · 3639 阅读 · 1 评论 -
MySQL 配置主从复制实践
一、检测通信二、master配置1. 开启二进制日志2. 创建一个用于主从库通信用的账号3. 获取binlog文件名和position三、slave配置1. 配置全局唯一的server-id2. 使用master创建的账户读取binlog同步数据3. 开启slave服务四、配置中可能出现的问题1. 网络连接问题2. binlog的position问题3. SQL线程出错原创 2022-03-30 20:25:51 · 1798 阅读 · 1 评论 -
MySQL 主从复制原理
主从复制概念读写分离概念主库介绍从库介绍主从复制流程主从复制效果展示原创 2022-03-30 16:13:55 · 2664 阅读 · 6 评论 -
MySQL SQL的完整处理流程
mysql client和 mysql server进行通信的时候,如果走完所有的MySQL Server模块,需要依次经过连接器、解析器、优化器、执行器、存储引擎连接器:使用TCP加密的ssl通信协议,管理连接,控制最大连接量,检测连接时长,权限验证(账号密码等),查询缓存(两次同样的select之间有更新操作,缓存会清空)解析器:生成语法树,解析SQL词法以及语法分析优化器:生成执行计划(explain可查看)执行器:调用引擎相应的API接口进行数据的读写存储引擎:读写磁盘数据,构建B+树索原创 2022-03-29 16:58:19 · 1024 阅读 · 0 评论 -
MySQL mysqldump 数据备份
部署在后台服务器或者云端的MySQL大部分做了一些限制,在本地无法直连后台服务的数据库3306端口上,一般有防火墙之类的网络中间件在远程服务器一般没有条件用GUI图形化界面工具,进行数据备份,所以我们一般都是通过命令mysqldump进行导出建库建表的SQL:mysqldump -u 用户名 -p111111 --all-databases > ~/all.sqlmysqldump -u 用户名 -p111111 --databases school > ~/school.sqlmy原创 2022-03-29 15:45:27 · 1017 阅读 · 1 评论 -
MySQL Server 层四个日志
一、MySQL Server层日志简介二、配置文件参数三、错误日志四、查询日志五、二进制日志1. 演示binlog记录更改2. 演示binlog数据恢复六、慢查询日志原创 2022-03-29 12:59:34 · 1296 阅读 · 2 评论 -
MySQL SQL和索引优化总结
文章目录一、SQL语句和索引的优化二、应用优化三、MySQL Server优化1. 自适应哈希索引2. redo log3. MySQL查询缓存4. MySQL线程缓存5. 并发连接数量和超时时间首先我们需要知道MySQL主要是从以下3个方面进行优化:SQL语句和索引应用优化(引入缓存、连接池)配置参数优化一、SQL语句和索引的优化当数据量比较大,若SQL语句写的不合适,会导致SQL的执行效率低,我们需要等待很长时间才能拿到结果针对性优化的时候,若数据量太大,可通过limit分页exp原创 2022-03-28 22:02:15 · 4550 阅读 · 3 评论 -
MySQL 重做日志 redo log
在事务的ACID特性中,原子性(A)、一致性(C)、持久性(D)由undo log和redo log实现,隔离性(I)由锁+MVCC实现undo log:事务还没有commit,中途执行异常,可以使用undo log把数据恢复到事务执行前的状态,确保事务的原子性redo log:事务commit成功,由于更新磁盘数据需要一段时间,此时若发生异常,可以使用redo log重新执行这一事务的SQL,确保事务的持久性(只要事务commit成功,不管发生什么异常事件,只要下一次MySQL服务正常进行,那上一次c原创 2022-03-28 16:23:48 · 2649 阅读 · 1 评论 -
MySQL 意向共享锁、意向排他锁、死锁
一、InnoDB表级锁二、意向共享锁和意向排他锁三、死锁1. 数据库中的死锁2. 死锁场景以及解决办法3. 操作四、锁的优化建议原创 2022-03-28 12:50:26 · 3493 阅读 · 0 评论 -
MySQL MVCC多版本并发控制(脏读和不可重复读解决原理)
一、MVCC概念二、MVCC应用于已提交读隔离级别1. 解决脏读2. 无法解决不可重复读3. 无法解决幻读三、MVCC应用于可重复读隔离级别1. 解决脏读2. 解决不可重复读3. 理解 可重复读隔离级别,只生成一次数据快照4. 理解 可重复读隔离级别,不能解决幻读原创 2022-03-23 20:09:35 · 3452 阅读 · 0 评论 -
MySQL 回滚日志 undo log
一、引入 undo log二、undo log1. undo log的概念2. undo log的作用3. undo log的数据结构三、undo log举例原创 2022-03-23 16:51:42 · 2434 阅读 · 1 评论 -
MySQL间隙锁(幻读解决原理)
一、间隙锁概念二、测试间隙锁范围加锁场景1:用不可重复的主键id测试间隙锁场景2:用可重复的age(有索引)测试间隙锁场景3:实际情况需要具体分析用的到底是行锁还是表锁三、测试等值间隙锁1. 测试不能重复的主键索引2. 测试能重复的辅助索引原创 2022-03-22 16:07:00 · 15697 阅读 · 6 评论 -
MySQL表锁、行锁、排它锁和共享锁
一、事务隔离机制的选择二、表级锁&行级锁三、排它锁(Exclusive)和共享锁(Shared)1. 测试不同事务之间排它锁和共享锁的兼容性2. 测试行锁加在索引项上四、串行化隔离级别测试原创 2022-03-21 17:09:34 · 6452 阅读 · 6 评论 -
MySQL事务的隔离级别
一、隔离级别概念二、测试READ-UNCOMMITTED隔离级别三、测试TRANSACTION_READ_COMMITTED隔离级别四、测试TRANSACTION_REPEATABLE_READ隔离级别五、测试TRANSACTION_SERIALIZABLE隔离级别原创 2022-03-21 11:55:57 · 2035 阅读 · 3 评论 -
MySQL事务的ACID特性以及并发问题
一、事务概念二、ACID特性三、事务并发存在的问题四、事务相关命令原创 2022-03-21 09:57:36 · 392 阅读 · 0 评论 -
MySQL优化之慢日志查询
一、慢查询日志概念二、慢查询日志实践1. 打开慢查询日志开关slow_query_log2. 设置合理的、业务可以接受的慢查询时间上限long_query_time3. 压测执行各种业务4. 查看慢查询日志5. 用explain分析这些耗时的SQL语句,从而针对性优化三、show profiles查看sql具体的运行时间原创 2022-03-13 20:21:10 · 13003 阅读 · 5 评论 -
MySQL索引常见问题
问题1:用联合索引优化using filesort问题2:给区分度高的字段加索引问题3:select的字段会导致回表问题4:多个字段有索引,使用哪个索引?问题5:内连接之大表和小表问题6:模糊搜索使用索引问题7:in和not in是否能用到索引?not in优化成range范围搜索问题8:索引字段涉及函数以及类型转换,无法用到索引问题9:or不能使用索引?原创 2022-03-13 16:57:02 · 1609 阅读 · 0 评论 -
MySQL哈希索引以及InnoDB自适应哈希索引
一、哈希索引二、InnoDB自适应哈希索引原创 2022-03-13 11:18:32 · 4144 阅读 · 0 评论 -
MyISAM主键索引树和二级索引树
MyISAM:数据和索引没有放在一块,叫做 非聚集索引,不可能回表InnoDB:数据和索引存放在一块,叫聚集索引 ,会涉及回表此时假设一个场景:uid是主键,有主键索引树,name有索引,创建二级索引树当前场景下的主键索引树如下,B+树非叶子节点上只有索引值,叶子节点上有索引值和数据地址MyISAM索引树原理图如下:当前场景下的二级索引树如下:InnoDB二级索引树叶子节点上是主键值uid,而MyISAM存的则是数据的地址当前场景下,主键索引树和二级索引树两者之间的联系:在My原创 2022-03-12 09:43:17 · 1057 阅读 · 0 评论 -
InnoDB主键索引树和二级索引树
我们这里讨论InnoDB存储引擎,数据和索引存储在同一个文件student.ibd场景1:主键索引树uid是主键,其他字段没有添加任何索引select * from student;如果是这样查询,这表示整表搜索,从左到右遍历叶子节点链表,从小到大访问select * from student where uid<5;如果是这样查询,这表示范围查询,就直接在有序链表中遍历搜索就可以了,直到遍历到第一个不小于5的key结束遍历select * from student wher原创 2022-03-10 16:05:20 · 1056 阅读 · 0 评论 -
MySQL索引底层实现原理(B树和B+树)
一、B-树索引1. 理论部分2. B树黄色的data表示key索引所在的这一行的数据,data存储的是数据本身内容,还是数据在磁盘上的地址?关于操作系统从磁盘读取索引文件到内存中的几个问题B树的缺点三、B+树B+树特点MySQL最终为什么要采用B+树存储索引结构?原创 2022-03-10 11:08:15 · 6174 阅读 · 1 评论 -
MySQL存储引擎以及索引
一、数据库引擎1. 查看数据库引擎2. 查看表结构3. 查看表相关文件4. 各存储引擎的区别二、MySQL索引1. 索引分类2. 索引的创建和删除3. 关于缓存问题4. 过滤条件字段涉及类型转换则无法使用索引5. 删除索引6. explain字段含义7. 加索引优化原则原创 2022-03-10 09:39:13 · 3657 阅读 · 2 评论 -
MySQL联合查询
一、内连接查询二、详细解释内连接的查询过程三、左、右连接应用场景1:查看没有参加考试的同学应用场景2:查看没有参加3号课程考试的同学原创 2022-01-16 21:40:13 · 1438 阅读 · 0 评论 -
MySQL库表操作以及简单查询语句
文章目录一、结构化查询语句二、库操作三、表操作四、CRUD操作五、查询操作1. 去重:2. union合并查询3. 带in子查询4. 分页查询六、创建存储过程procedure一、结构化查询语句SQL是结构化查询语言,它是关系型数据库的通用语言。SQL主要可以分为一下三种类型:DDL(Data Definition Languages)语句:数据定义语句,这些语句定义了不同的数据库、表、列、索引等对象。常用的语句关键字有create、drop、alterDML(Data Manipulation原创 2022-01-11 01:31:00 · 834 阅读 · 0 评论 -
MySQL数据类型、运算符以及数据库范式
MySQL数据类型、运算符以及数据库范式原创 2022-01-09 19:34:57 · 6553 阅读 · 6 评论 -
MySQL笔记
一、SQL语句二、C语言连接数据库1. 连接数据库使用的头文件和库文件2、初始化连接句柄3. 连接数据库4. 关闭连接5. 执行sql语句6. 提取结果7. 获取结果集中有多少行8. 取出结果集中的一行记录9. 查看记录行的列数10. 释放结果集占用的内存11. 获取错误信息12. 连接测试程序三、增加、修改、删除的程序三、查询的程序四、用户管理与授权原创 2020-01-25 14:58:46 · 1870 阅读 · 0 评论