
mysql
王佑辉
个人笔记,多谢指正,不喜勿喷
展开
-
【mongodb】mongodb和MySQL体系结构的对比
特性MySQLMongoDB数据模型关系型(表、行、列)文档型(BSON 文档)扩展性垂直扩展 + 手动分片原生水平分片查询语言SQLMongoDB 查询语言(MQL)一致性强一致性(ACID)最终一致性(可调)索引B-Tree、全文索引B-Tree、文本、地理空间索引适用场景结构化数据、复杂事务半结构化数据、高扩展性需求##### 10. 选择建议1.如果需要强一致性、复杂事务和关系型数据模型,选择 MySQL。原创 2025-04-05 12:31:03 · 796 阅读 · 0 评论 -
【mysql】查事务进程
1.可以通过查询 INFORMATION_SCHEMA 库中的 INNODB_TRX 表来查看具体的InnoDB事务信息。3.将返回与 SHOW PROCESSLIST 类似的信息,可以使用标准的SQL查询语句进行更多自定义过滤和排序。1.通过查询 INFORMATION_SCHEMA 库中的 PROCESSLIST 表来获取类似的信息。3.将返回一个结果集,其中包括所有当前连接的会话和它们的状态。3.例如这将终止ID为1234的会话及其相关的事务。2.可以查看当前活动的会话和它们正在执行的操作。原创 2025-03-17 19:24:45 · 988 阅读 · 0 评论 -
【mysql】根据in的顺序排序
1.在 MySQL 中,IN 子句通常用于过滤特定的记录。然而,IN 子句本身并不能保证结果按特定的顺序返回。4.性能问题:FIELD() 函数在排序时需要额外的计算开销。如果你的数据集很大,这种方法可能会影响查询性能。5.适用性:这种方法适用于小型数据集或需要特定排序的场景。如果你有更复杂的排序需求,可能需要考虑其他方法。2.如果你希望结果按照 IN 子句中指定的顺序返回,可以使用 FIELD() 函数。原创 2025-03-10 15:27:44 · 439 阅读 · 0 评论 -
【mysql】如何查看大表记录行数
1.在 InnoDB 存储引擎中,可以使用索引的统计信息来获取行数。1.为了在生产环境中高效地获取精确的行数,可以使用触发器维护一个单独的表,用于记录每个大表的行数。1.ANALYZE TABLE 可以更新表的统计信息,然后使用 SHOW TABLE STATUS 来查看估算的行数。1.如果表使用了分区,可以分别统计每个分区的行数,然后汇总得到总行数。1.查询 INFORMATION_SCHEMA.TABLES 表也可以获取表的估算行数。2.这种方法可以提供实时的精确计数,而不会每次都扫描整个表。原创 2024-12-18 19:55:14 · 741 阅读 · 0 评论 -
【mysql】如何解决主从架构从库延迟问题
2.调整 slave_parallel_workers:在 MySQL 5.7 及更高版本中,可以使用多线程复制,通过设置 slave_parallel_workers 参数来开启从库的多线程复制。3.使用SSD存储:SSD 相较于传统的 HDD,有更快的读写性能,可以显著提高从库的写入速度。2.多级复制:将从库分层,主库同步到一级从库,一级从库再同步到二级从库,以分散同步压力。2.低延迟的网络连接:确保主库和从库之间的网络连接低延迟、高带宽。1.通过调整 MySQL 从库的配置,可以提高从库的复制性能。原创 2024-12-18 17:25:22 · 1066 阅读 · 0 评论 -
【mysql】tinyint、int、bigint的区别
1.有符号范围:-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807。3.BIGINT:适用于需要存储非常大的整数值的场景,如大型计数器、数据库中的唯一标识符(如UUID的部分)等。1.有符号范围:-2,147,483,648 到 2,147,483,647。2.有符号范围:-2,147,483,648 到 2,147,483,647。2.无符号范围:0 到 18,446,744,073,709,551,615。2.INT:占用4个字节的存储空间。原创 2024-12-17 17:48:36 · 616 阅读 · 0 评论 -
【mysql】大型互联网项目为什么考虑禁止使用外键
1.大型互联网项目禁止使用外键主要是出于性能、并发处理、数据一致性的灵活控制以及数据迁移的便利性等方面的考虑。2.外键约束在数据插入、更新和删除时会引入额外的数据一致性校验查询,这会增加数据库的负载,并可能导致性能下降。3.特别是在高并发环境下,外键约束可能引发更多的锁竞争和死锁情况,从而影响系统的稳定性和吞吐量。2.外键约束会导致数据表之间产生紧密的耦合关系,这会增加数据迁移的难度和复杂性。1.在大型项目中,随着业务的发展和数据量的增长,数据迁移和扩容是常见的需求。原创 2024-12-17 17:20:38 · 546 阅读 · 0 评论 -
【mysql】mysql数据库表字符集utf8与utf8mb4的区别
1.在MySQL中,utf8字符集实际上是一个三字节的变长字符集,它支持大多数的国际字符集,但并不是完整的Unicode字符集。2.utf8字符集最多使用3个字节来编码字符,因此它能够表示的字符范围是有限的。3.早期的MySQL版本(如5.5.3之前)中的utf8字符集不支持四字节的Unicode字符,如一些表情符号和某些不常用的汉字。原创 2024-12-17 17:10:08 · 796 阅读 · 0 评论 -
【mysql】row模式的主从架构中,删除无主键的表可能导致从库“夯住”或产生较大的同步延迟
2.同步延迟:即使从库没有夯住,由于全表扫描的耗时性,也会导致从库在处理binlog日志时出现较大的同步延迟。3.当主库上的数据发生变化时,这些变化会记录在binlog中,并通过网络传输到从库,由从库的SQL线程重新执行一遍,以实现数据的同步。5.在大数据量的表中,全表扫描是非常耗时的,可能会导致从库的SQL线程阻塞,从而无法继续处理后续的binlog日志。2.在row模式的主从架构中,如果表没有主键,那么在执行删除操作时,从库在定位需要删除的数据时可能会变得非常困难。:这是最好的解决办法。原创 2024-12-17 16:56:28 · 351 阅读 · 0 评论 -
【mysql】explain执行计划的各个参数
2.常见类型:SIMPLE(简单查询,不包含子查询和UNION)、PRIMARY(最外层查询,若包含复杂子查询,则最外层被标记为PRIMARY)、UNION(UNION中的第二个及后续SELECT被标记为UNION)、SUBQUERY(在SELECT或WHERE列表中包含的子查询)、DERIVED(在FROM列表中包含的子查询,也叫做派生类)等。在复杂的查询中,如包含子查询或UNION的查询,每个SELECT关键字都会被分配一个唯一的id值,以表示其执行顺序,通常第一个select的id值最小。原创 2024-11-12 22:49:26 · 1103 阅读 · 0 评论 -
【mysql】什么是当前读
1.插入操作在某些情况下也可能涉及到当前读,比如通过触发器(Triggers)或其他复杂的插入逻辑,不过一般来说,插入操作更多的是修改表的数据结构而不是读取已有数据。1.在mysql中,当前读(Current Read)是一种读取操作,不仅读取数据,还会对数据加上适当的锁,来保证数据的一致性和事务的隔离性。1.这种查询会对读取的行上加上共享锁(Shared Lock),以防止其他事务对这些行为进行更新或删除操作,但允许其他事务读取这些行。1.删除操作会对涉及的数据行加上排他锁,以确保数据一致性。原创 2024-10-27 22:34:26 · 478 阅读 · 0 评论 -
【mysql】centos7安装mysql8
7.遇到问题mysql-community-devel 安装失败。2.tar -zxvf 可以解压tar.gz后缀的压缩文件。1.tar -xvf 可以解压tar.xz后缀的压缩文件。3.放到服务器的目录(这里是/opt/mysql)4. 遇到问题,卸载mariadb-libs。2.查看root的临时密码。1.执行命令启动服务。2.使用临时密码登录。原创 2024-03-29 15:23:26 · 836 阅读 · 0 评论 -
【mysql】drop、delete与truncate的区别
5.需要删除表中的特定数据行时,应使用delete,并可以结合WHERE子句来实现部分数据删除。2.在执行这些操作时,尤其是在没有备份的情况下,应格外小心,以避免不必要的数据丢失或结构破坏。3.delete可能需要逐行删除数据,尤其是当涉及到复杂的WHERE条件时,因此删除最慢。5.需要删除表中的数据 重置计数器,但保留表结构时,应使用truncate。1.仅删除表中的数据,但保留表结构及其相关对象(如索引、约束、触发器等)1.不仅删除表中的数据,还删除表结构及其所有相关对象。4.会激活与表相关的触发器。原创 2024-03-19 15:48:22 · 562 阅读 · 0 评论 -
【线上问题】linux服务器磁盘爆满导致服务失效
1.docker启动的服务要限制docker日志大小,不然也会刷爆2.这里的mysql不是docker启动的,安装mysql时要配置好定期清理binlog日志的时间,时间长了会爆炸。原创 2024-01-12 11:08:01 · 925 阅读 · 0 评论 -
【线上问题】服务器关机导致docker启动的mysql数据库消失了
5. 确定后,将_data里的数据拷贝到数据库data映射目录,重启docker即可。1. 服务器迁移断电导致docker启动的mysql数据库没有了数据。4. ll命令一下能看到各个数据库名,确定自己要恢复的数据库。1. sudo -i切换root账号。3. mysql重启数据库消失了。2. 查找mysql的容器卷。2. data目录是空的。3. 进入各个_data。原创 2023-11-09 15:20:45 · 2542 阅读 · 0 评论 -
【docker】docker部署mysql
5.当容器中的网络服务需要被外部机器访问时,可以将容器中提供服务的端口映射到宿主机的端口上。2.容器中部署的mysql端口3306不能被外部机器和宿主机直接通信。6.外部机器访问宿主机的该端口,从而间接访问容器的服务。1.容器内的网络服务和外部机器不能直接通信。3.外部机器和宿主机之间可以直接通信。3.创建容器,设置端口映射、目录映射。4.宿主机和容器可以直接通信。4.操作容器中的mysql。1.搜索mysql镜像。2.拉取mysql镜像。1.搜索mysql镜像。2.拉取mysql镜像。原创 2023-07-24 20:51:35 · 963 阅读 · 1 评论 -
【mysql】explain执行计划之select_type列
9.union:分union与union all两种,若第二个select出现在union之后,则被标记为union;10.dependent union:当union作为子查询时,第一个union为dependent subquery,第二个union为dependent union。6.subquery:select、where之后包含了子查询,在select语句中出现的子查询语句,结果不依赖于外部查询(不在from语句中)5.union:union中的第二个或者后面的查询语句。原创 2023-05-21 12:54:48 · 3138 阅读 · 0 评论 -
【mysql】explain执行计划之id列
- null表示结果集,不需要使用它来进行查询。原创 2023-05-21 12:46:35 · 1358 阅读 · 0 评论 -
【mysql】事务的四大特性
3.事务A和事务B在同时操作数据库,事务A操作数据库的时候,不会影响事务B的执行,事务B并发操作数据库时也不会影响事务A的执行。3.张三给李四转账,不管事务是正常执行完毕,还是执行失败回滚,两个人的账户余额总和都是相同的。1.英文: Durability [dərəˈbɪlɪti]2.事务一旦提交或者回滚,它对数据库中的数据的改变是永久的。1.英文:Atomicity [ˌætəˈmɪsəti]1.英文:Isolation [ˌaɪsəˈleɪʃn]2.事务完成时,必须使所有的数据都保持一致状态。原创 2023-04-25 21:54:46 · 720 阅读 · 0 评论 -
【mysql】联合查询union和union all的区别
4.语法:select 字段列表 from 表A union select 字段列表 from 表B。3.union查询把多次查询的结果合并起来,形成一个新的查询结果集。5.union all会将全部的数据直接合并在一起。2.联合查询的多张表的字段类型必须保持一致。1.联合查询的多张表的列数必须保持一致。6.union会对合并之后的数据去重。原创 2023-04-22 17:11:47 · 422 阅读 · 0 评论 -
【mysql】binlog日志
这些情况是NDB引擎,表的增删改的DML操作会以row格式记录、SQL语句里包含UUID()函数、SQL语句里使用了用户定义函数(UDF)、包含了insert delayed语句、使用了临时表、自增字段被更新。1.statement:基于sql语句的日志记录,记录的是sql语句,对数据进行修改的sql都会记录在日志文件中。5.在mysq的配置文件中配置二进制日志的过期时间,设置之后二进制日志过期会自动删除。2.row:基于行的日志记录,记录的是每一行的数据变更,默认是基于行的日志记录。原创 2023-04-19 21:48:50 · 5060 阅读 · 0 评论 -
【mysql】使用索引注意事项
5.索引中不会包含有null的值,组合索引如果某一列含有null值,这列对组合索引是无效的,索引列尽量不要让字段的默认值为null。4.如果select中某个字段不在索引中,可以将该列加入到组合索引中,避免二次回表查询。7.like 'value%'可以使用到索引,但like '%value%'会全表扫描。6.查询条件左右两侧类型不匹配会发生隐式转换,可能会导致索引失效。1.不在列上使用函数或运算,会导致索引失效而进行全表扫描。=、in等没有顺序的操作符,会导致索引失效。原创 2023-03-26 21:33:51 · 139 阅读 · 0 评论 -
【mysql】数据库三范式
3.第三范式:先满足第二范式(2NF),要求:表中的每一列只与主键直接相关而不是间接相关,(表中的每一列只能依赖于主键)。例如存在一个部门信息表,其中每个部门有部门编号、部门名称、部门简介等信息,员工信息表中列出部门编号后就不能再将部门名称、部门简介等与部门有关的信息再加入员工信息表中。2.第二范式:满足第一范式后,要求表中的所有列,都必须依赖于主键,而不能有任何一列与主键没有关系,也就是说一个表只描述一件事情。原创 2023-03-26 21:08:32 · 108 阅读 · 0 评论 -
【mysql】性能优化
3.show profiles工具使用,查看sql语句当前会话中sql资源消耗情况,io开销、cpu开销、内存开销等。2.读写分离设计,读多写少的场景中通过读写分离的方案,可以避免读写冲突导致的性能问题。4.热点数据可以引入更为高效的缓存数据库,例如redis、mongoDB等。2.sql执行计划分析,使用关键字explain查看当前sql的执行计划。1.修改my.cnf中默认配置,例如修改最大连接数。3.提高硬盘的读写速度,使用专用的固态硬盘。1.慢sql的定位与排查,慢查询日志分析。原创 2023-03-26 20:56:36 · 726 阅读 · 0 评论 -
【mysql】索引设计原则
在修改索引列的内容时,索引会进行更新甚至重构,索引列越多,更新重构时间越长。只保持需要的索引有利于查询即可,不需要建立多余列的索引。9.尽量扩展索引,不新建索引,例如a字段有索引,加a,b字段的索引时,可以修改原来a字段的索引为联合索引。4.使用短索引,对长字符串列进行索引,可以指定一个前缀长度,可以节省大量索引空间。8.不能有效区分数据的列不创建索引,例如性别,区分度太低,加了索引也没有多大作用。2.适合索引的列是在where子句中的列,或者连接子句中指定的列。7.更新频繁的字段不适合创建索引。原创 2023-03-26 20:40:40 · 394 阅读 · 0 评论 -
【mysql】mysql的各种索引
前缀索引可以建立的类型为char、varchar、binary、varbinary的列上,减少索引占用的存储空间,能提升索引查询效率,mysql无法使用前缀索引做order by和group by。如果存在主键,主键索引就是聚集索引,不存在主键,使用第一个唯一索引作为聚集索引,没有合适的唯一索引,innodb会生成一个rowid作为隐藏的聚集索引。1.主键索引:建立在主键上的索引,一张表只能有一个主键索引,索引列值不能为空,通常在创建表是一起创建。原创 2023-03-26 20:16:19 · 316 阅读 · 0 评论 -
【mysql】b树和b+树的区别
2.b+树索引的所有数据均存储在叶子节点,并用链表链接成一个线性表,在数据库设计中b+树中各个页之间是通过双向链表连接的,叶子节点中的数据是通过单向链表连接的,b+树更加适合在区间范围查询。1.b+树的非叶子节点仅存储关键字值,不挂载数据,b树的所有节点不仅存关键字还会挂载数据,数据库存储每一页的大小是固定的,相同大小的页,b+树存的关键字越多,可以减少磁盘io次数。3.b+树的叶子节点是有序的,叶子节点是相互指向的。2.b+树的所有数据叶子节点上都存在。1.b+树是b的一个升级版。原创 2023-03-26 14:43:53 · 710 阅读 · 0 评论 -
【mysql】b树
3.四阶b树除了根节点外,其它节点至少有2个子节点(m阶至少有m/2个)2.四阶b树中每个节点最多有3个关键字,如图最大3个(m阶有m-1个)1.四阶b树中每个节点最多有4个孩子节点,如图最大4个(m阶有m个)4.关键字大小顺序从左到右排序。2.一个关键字的节点图。3.二个关键字的节点图。4.三个关键字的节点图。原创 2023-03-26 14:22:02 · 1087 阅读 · 0 评论 -
【spring】spring事务的隔离级别
1.脏读2.不可重复读3. 幻读4.是并发事务产生的问题。原创 2023-03-21 21:28:18 · 1365 阅读 · 1 评论 -
【mysql】事务的四大特性
4.持久性(durability [dərəˈbɪlɪti]):事务一旦被提交,数据库中的数据的改变是永久性的,即使数据库遇到故障,提交事务的操作也不会丢失。2.一致性(consistency [kənˈsɪstənsi]):事务执行之前和执行之后都处于一致性状态,例如转账前后,两个账户的钱总和是一致的。1.原子性(atomicity [ætəˈmɪsəti]):事务包含的所有操作要么全部成功,要么全部失败回滚。3.隔离性(isolation [aɪsəˈleɪʃn]):多个并发事务之间要相互隔离。原创 2023-03-19 22:25:08 · 74 阅读 · 0 评论 -
【面试】InnoDB和MyISAM的区别
InnoDB和MyISAM区别原创 2023-02-10 22:08:52 · 107 阅读 · 0 评论 -
【oracle】oracle查询
mysql查询原创 2022-09-16 13:41:00 · 172 阅读 · 0 评论 -
【mysql】mysql设置全局时区
mysql设置时区原创 2022-06-15 20:59:19 · 612 阅读 · 0 评论 -
【mysql】mysql安装
mysql安装原创 2022-06-05 21:50:48 · 92 阅读 · 0 评论 -
【mysql】mysql触发器before与after的区别
1.商品表-- 创建商品表DROP TABLE IF EXISTS `goods`;CREATE TABLE `goods` ( `id` int(0) NOT NULL AUTO_INCREMENT COMMENT '商品id', `name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '商品名称', `num` int(0) DEFAULT NULL COMMEN原创 2022-02-15 18:32:22 · 4179 阅读 · 0 评论 -
【java】mybatis-plus lambda表达式符号总结
1.函数名及用法//查询学生QueryWrapper<Student> queryWrapper = new QueryWrapper();函数说明举例eqequals等于(=)queryWrapper.lambda().eq(Student::getName,“老王”);nenot equals不等于(<>)queryWrapper.lambda().ne(Student::getName,“老王”);gtgreater than原创 2021-10-16 12:16:25 · 7535 阅读 · 0 评论 -
【mysql】排序分页查询导致数据混乱问题
1.问题说明1.根据创建时间排序,当创建时间大量重复时,分页查询会导致某条数据出现在不同分页中select * from student order by create_time desc limit 10,10;select * from student order by create_time desc limit 20,10;2.问题解决1.如果有id主键,可以再加id排序select * from student order by create_time desc,id asc原创 2021-07-01 11:54:07 · 1263 阅读 · 2 评论 -
【java】jdbc用法mysql示例
1.创建数据库create database `student`;use `student`;2.sql创建表语句//创建学生表studentDROP TABLE IF EXISTS `student`;CREATE TABLE `student` ( `id` bigint(0) NOT NULL COMMENT 'ID', `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL C原创 2021-05-27 22:42:28 · 474 阅读 · 0 评论 -
【mysql】sql系列操作
【mysql】sql系列操作1.创建数据库2.创建表2.修改表名3.插入语句3.清空表数据4.表添加字段5.表修改字段7.删除表字段8.删除表1.创建数据库-- 创建数据库名为test_database的数据库create database `test_database`;2.创建表-- 创建表名为student的数据表create table `test_database`.`student` ( `id` bigint(0) NOT NULL COMMENT 'ID', `nam原创 2021-01-11 13:26:34 · 337 阅读 · 0 评论