MySQL:MySQL总结

文章目录

  • MySQL
    • 思维导图
    • 基础
      • 实际在 Innodb 存储引擎中,会用一个特殊的记录来标识最后一条记录,该特殊的记录的名字叫 supremum pseudo-record ,所以扫描第二行的时候,也就扫描到了这个特殊记录的时候,会对该主键索引加next-key 锁,最小记录也有一个特殊的名字叫infimum record
      • MySQL记录存储
      • 行格式
      • Compact行格式
      • varchar(n)的取值
      • 行溢出
    • 事务
      • 事务有哪些特性?
      • 并发事务会引发什么问题?
      • 事务的隔离级别?
      • Read View在MVCC工作原理?
      • 读提交是如何工作的?
      • 可重复读是如何工作的?
      • 幻读如何解决
      • 可重复度无法完全解决幻读
      • 全局锁
      • 表级锁
      • 行级锁
      • MySQL加锁方式
      • 死锁
      • 隐式锁
    • 内存
      • 为什么要有Buffer Pool
      • Buffer Pool大小
      • Buffer Pool存储内容
      • 如何管理Buffer Pool
      • 管理脏页
      • 提高命中率
      • 脏页刷新时机
    • 日志
      • undo log(回滚日志)
      • redo log(重做日志)
      • binlog(归档日志)
      • 两阶段提交
      • MySQL磁盘IO很高
    • 索引
      • 面试题
      • 概念
      • 分类
      • 创建索引的条件
      • 索引失效
      • 优化索引
      • 适合索引的数据结构
      • count
    • 因为存在两个索引,一个是主键索引,一个是非唯一索引(二级索引),所以在加锁时,同时会对这两个索引都加锁,但是对主键索引加锁的时候,只有满足查询条件的记录才会对它们的主键索引加锁

MySQL

思维导图

在这里插入图片描述

基础

实际在 Innodb 存储引擎中,会用一个特殊的记录来标识最后一条记录,该特殊的记录的名字叫 supremum pseudo-record ,所以扫描第二行的时候,也就扫描到了这个特殊记录的时候,会对该主键索引加next-key 锁,最小记录也有一个特殊的名字叫infimum record

MySQL记录存储

  • 表空间结构

    • 段+区+页+行

行格式

  • Redundant

    • 太老了,没人用了
  • Compact

    • 相比起Redundant更紧凑

      • 重点理解这个
  • Dynamic

    • 基于Compact进行改进,默认用这个
  • Compressed

    • 基于Compact进行改进

Compact行格式

  • 记录的额外信息

    • 变长字段列表

      • 记录头信息指针指向下一个记录的记录头信息和真实数据,逆序存储

      • 使得位置靠前的记录的真实数据和数据对应的字段长度信息可以同时在一个 CPU Cache Line 中,这样就可以提高 CPU Cache 的命中率

    • NULL值列表

      • 用二进制比特位表示,逆序存储,必须是字节的整数倍
  • 记录的真实数据

    • 隐藏字段

      • row_id

        • 如果没有主键和唯一约束就需要这个字段,占6个字节
      • trx_id

        • 事务ID,表示这是哪个事务产生的记录,占6个字节
      • roll_ptr

        • 上一个版本的指针,MVCC机制,占7个字节

varchar(n)的取值

  • 单字段情况

    • 真实数据+真实数据所占字节数+NULL标记

      • 总共最大占用65535

        • ASCII

          • 65535 - 2 - 1 = 65532
        • UTF-8

          • 65532/3 = 21844
  • 多字段情况

    • 所有字段的长度 + 变长字段字节数列表所占用的字节数 + NULL值列表所占用的字节数 <= 65535

行溢出

  • MySQL存储的基本单位是页,一页是16KB

    • 超过后的数据会存放到溢出页中

    • Dynamic和Compressed的主要区别

事务

事务有哪些特性?

  • 原子性

    • undo log
  • 隔离性

    • MVCC+锁
  • 持久性

    • redo log
  • 一致性

    • 上述仨

并发事务会引发什么问题?

  • 脏读

    • 读取到未提交事务的数据
  • 不可重复读

    • 多次读数据不一样
  • 幻读

    • 多次读条数不一样

事务的隔离级别?

  • 读未提交

    • 可能会脏读+不可重复度+幻读
  • 读提交

    • 可能会不可重复读+幻读
  • 可重复读

    • 可能会幻读
  • 串行化

    • 不可能遇见问题

Read View在MVCC工作原理?

  • 四个字段

  • 隐藏列

    • trx_id

      • 当发生变化时,该事务的事务 id 记录在 trx_id 隐藏列里
    • roll_pointer

      • 指向旧版本的记录,方便undo log回溯
  • 根据trx_id判断

    • trx_id 值小于 Read View 中的 min_trx_id

      • 该版本的记录对当前事务可见
    • trx_id 值大于 Read View 中的 max_trx_id

      • 该版本的记录对当前事务不可见
    • 在这之间

      • 看在不在m_ids中

          • 不可见
        • 不在

          • 可见
  • 这种通过「版本链」来控制并发事务访问同一个记录时的行为就叫 MVCC(多版本并发控制)

读提交是如何工作的?

  • 执行语句生成一个Read View

可重复读是如何工作的?

  • 启动事务生成一个Read View

幻读如何解决

  • 快照读

    • MVCC解决幻读
  • 当前读

    • next-key lock(记录锁+间隙锁)方式解决了幻读

      • 加锁直接就阻塞了

可重复度无法完全解决幻读

  • 场景一

    • 事务A查不到记录,事务B插入,事务A直接update,可以更新成功
  • 场景二

    • 事务A使用快照读查不到,事务B插入,事务A使用当前读能查到
  • 解决方式

    • 开启事务后迅速update,插入next-key锁

全局锁

  • 使用

    • flush tables with read lock

      • unlock tables
  • 只能查询

    • 主要用于数据库的全库逻辑备份
  • 优化

    • 可重复读的隔离级别

      • 备份数据库之前先开启事务

表级锁

  • 表锁

    • 表锁除了会限制别的线程的读写外,也会限制本线程接下来的读写操作

    • 尽量避免,颗粒度太大,使用InnoDB的行级锁

  • 元数据锁

    • 读锁和写锁

      • 写锁优先级高于读锁
    • 在进行select和变更会自动添加,事务提交释放

  • 意向锁

    • 意向锁的目的是为了快速判断表里是否有记录被加锁
  • AUTO-INC锁

    • 保证自增字段可以正确自增,语句执行后才释放

    • 轻量级锁:值自增后锁释放,但可能会主从冲突

    • 当 innodb_autoinc_lock_mode = 2 时,并且 binlog_format = row,既能提升并发性,又不会出现数据一致性问题

行级锁

  • Record Lock

    • 记录锁,仅仅把一条记录锁上

      • 无法防止插入(非唯一索引)
    • 分为S型和X型

      • 共享锁和独占锁
  • Gap Lock

    • 间隙锁,锁定一个范围,但是不包含记录本身

    • 只存在于可重复读隔离级别

    • 目的是为了解决可重复读隔离级别下幻读的现象

  • Next-Key Lock

    • 锁定一个范围,并且锁定记录本身
  • 插入意向锁

    • 当语句被插入间隙锁后,如果还要插入语句,就会进入阻塞状态,而在这个期间就会有插入意向锁

MySQL加锁方式

  • 加锁的对象是索引,加锁的基本单位是 next-key lock

    • 可能会退化

    • 加锁的本质是避免幻读

    • 插入语句在插入一条记录之前,需要先定位到该记录在 B+树 的位置,如果插入的位置的下一条记录的索引上有间隙锁,才会发生阻塞

  • 加锁的SQL语句

    • select … lock in share mode;

    • select … for update;

    • update table … where id = 1;

    • delete from table where id = 1;

  • 行级锁的种类

    • 读已提交隔离级别

      • 记录锁
    • 可重复度隔离级别

      • 记录锁+间隙锁
  • MySQL加行级锁

    • 唯一索引等值查询

      • 存在

        • 该记录索引的锁退化为记录锁
      • 不存在

        • 该记录索引的锁退化为间隙锁
    • 唯一索引范围查询

      • 大于等于且存在

        • 该记录索引的锁退化为记录锁
      • 小于或者小于等于

        • 存在

          • 小于

            • 该记录索引的锁退化为间隙锁
          • 小于等于

            • 不退化
        • 不存在

          • 该记录索引的锁退化为间隙锁
    • 非唯一索引等值查询

      • 存在

        • 一定存在索引值相同的情况,因此需要全盘扫描

        • 对扫描到的二级索引记录加的是 next-key 锁

        • 在符合查询条件的记录的主键索引上加记录锁

        • 对第一个不符合条件的二级索引会退化成间隙锁

          • 避免幻读
      • 不存在

        • 扫描到第一条不符合条件的二级索引记录
          该二级索引的 next-key 锁会退化成X型间隙锁

        • 不存在查询条件的记录,不会对主键索引加锁

    • 非唯一索引范围查询

      • 不会进行退化
    • 没有加索引的查询

      • 把整个表都锁住了
    • MySQL 记录锁+间隙锁可以防止删除操作而导致的幻读

死锁

  • 两个事务同时select … for update申请间隙锁导致死锁

  • 间隙锁的意义只在于阻止区间被插入,因此是可以共存的。一个事务获取的间隙锁不会阻止另一个事务获取同一个间隙范围的间隙锁

  • 而插入意向锁本质上是一个特殊的间隙锁,两个事物不能同时有插入意向锁和间隙锁,因此死锁

  • 避免死锁

    • 设置事务等待锁的超时时间,超时回滚

    • 开启主动死锁检测,自动回滚

隐式锁

  • 当事务需要加锁的时,如果这个锁不可能发生冲突,InnoDB会跳过加锁环节,这种机制称为隐式锁

  • 特殊情况会转换为显示锁

    • 记录之间加有间隙锁

      • 生成插入意向锁,等另外一个事务释放间隙锁
    • Insert 的记录和已有记录存在唯一键冲突

      • 给主键/唯一二级索引加上S型记录锁

内存

为什么要有Buffer Pool

  • 每次从磁盘找数据效率太低,弄个缓存提升效率

Buffer Pool大小

  • 默认是128MB

Buffer Pool存储内容

  • 以16KB的页为单位

  • 索引页、数据页、undo页、插入索引页、锁信息、哈希

如何管理Buffer Pool

  • InnoDB 为每一个缓存页都创建了一个控制块

    • 缓存页的表空间、页号、缓存页地址、链表节点
  • 使用一个Free链表,把空闲缓存页链接到一起

  • 当需要从磁盘加载一个页到Buffer Pool时,就取一个空闲页,填好信息,移出链表

管理脏页

  • 使用一个Flush链表,把脏页管理起来

提高命中率

  • 预读失效

    • 新增一段old节点,预读会放到old中,访问了才放到young中
  • Buffer Pool污染

    • 提高进入young的门槛

      • 在old区域停留一定时间才能放到young中

脏页刷新时机

  • redo log满了

  • Buffer Pool空间不足

  • MySQL空闲

  • MySQL正常关闭

日志

undo log(回滚日志)

  • 用于事务回滚和MVCC,记录事务更新前信息

    • 实现原子性

redo log(重做日志)

  • 用于掉电故障恢复,记录事务更新后信息

    • 实现持久化
  • 为什么需要它,而不是直接写磁盘?

    • 实现事务的持久性,保证crash-safe

    • 将写操作从随机写变成了顺序写

  • redo log刷盘时机?

    • MySQL正常关闭

    • 缓冲区数据大于最大限度一半时

    • 后台线程每秒刷新一次

    • 事务提交时

  • redo log写满了怎么办?

    • 存储引擎中存在重做日志文件组,其中包含2个重做日志文件组ib_logfile0和ib_logfile1

    • 以循环写的方式进行写入,刷新进去就剔除

    • 如果写满了,MySQL会阻塞

binlog(归档日志)

  • 用于数据的备份和主从复制

  • binlog和redo log的区别?

    • 适用对象不同

      • binlog是server层的日志

      • redo log是innodb专属

    • 文件格式不同

      • binlog

        • STATEMENT

          • 每一条修改数据的 SQL 都会被记录到 binlog 中,恢复再执行,now等函数会导致数据不一致
        • ROW

          • 记录行数据最终被修改成什么样了,会导致文件非常大
        • MIXED

          • 结合上述两种模式,根据不同情况自动使用
      • redo log

        • 记录物理日志,比如对 XXX 表空间中的 YYY 数据页 ZZZ 偏移量的地方做了AAA 更新
    • 写入方式不同

      • binlog是追加写

        • 写满一个文件就换一个文件接着写
      • redo log是循环写

        • 日志大小固定,写满就重新开始
    • 用途不同

      • binlog用来备份恢复和主从复制

      • redo log进行掉电故障恢复

  • 主从复制流程

    • 写入binlog

      • 主库把数据进行写入binlog
    • 同步binlog

      • 从库会创建一个线程接收主库日志,写入到中继日志
    • 回放binlog

      • 从库会创建线程读取中继日志,回放日志信息,实现主从一致
  • 主从复制的模型

    • 同步复制

      • 主库要等待所有从库响应后再和客户端响应,一般不用
    • 异步复制

      • 主库不等待从库响应,默认用的是这个,但主库宕机数据就会发生丢失
    • 半同步复制

      • 主库等待任意一个从库响应就可以返回客户端,这样主库宕机也有一个从库有信息
  • binlog刷盘时机?

    • 事务执行中把日志写到binlog cache,事务提交后刷新

    • 一个事务只能有一个线程执行,每个线程都有binlog cache

两阶段提交

  • 为什么需要两阶段提交

    • 事务提交后,redo log和binlog都要持久化到磁盘

    • 如果MySQL宕机

      • 只提交redo log,那么从库数据会无法更新

      • 只提交binlog,那么主库数据会无法更新

    • 解决方式

      • 两阶段提交把单个事务的提交拆分成了 2 个阶段,准备和提交
  • 具体过程

    • prepare 阶段

      • 将内部 XA 事务的 ID写入到redo log中

      • 将 redo log 持久化到磁盘

      • 更改redo log状态为prepare

    • commit 阶段

      • 将内部 XA 事务的 ID写入到binlog中

      • 将 binlog 持久化到磁盘

      • 更改redo log状态为commit

  • 如果异常重启会怎么样?

    • MySQL重启后会扫描redo log文件

    • 碰到prepare状态,就去看binlog中是否含有该XID

      • 如果没有,就说明binlog没刷盘,回滚事务

      • 如果有,说明只是没有提交,把事务提交即可

    • 两阶段提交是以 binlog 写成功为事务提交成功的标识

  • 两阶段提交存在的问题

    • 磁盘 I/O 次数高

      • 每次事务提交,两个log都要和磁盘交互
    • 锁竞争激烈

      • 为了保证两个日志的提交顺序一致,要加锁
    • 解决方式

      • binlog组提交

        • 基本思路

          • 当有多个binlog要提交,合并为一组提交
        • 具体操作

          • flush阶段

            • 把多个事务按binlog顺序写入文件
          • sync阶段

            • 进行fsync操作,把文件刷新到磁盘
          • commit阶段

            • 对各个事务按顺序修改commit状态
        • 优化

          • 每个阶段用队列进行管理,这样锁只需要管理队列
      • redo log组提交

        • 备注

          • MySQL5.7版本开始才有redo log组提交的概念,在5.6版本中,redo log各自在prepare就完成了

          • 在MySQL5.7版本中,把redo log的prepare刷盘操作延迟到了commit的flush阶段

        • 具体操作

          • flush阶段

            • leader领导follower进行redo log刷盘

            • 再按照顺序写入binlog文件,不刷盘

          • sync阶段

            • 进行等待,多等几组数据一起进行刷盘
          • commit阶段

            • 修改redo log的状态

MySQL磁盘IO很高

  • 原因

    • 事务提交时,需要将redo log和binlog刷新到磁盘,需要进行磁盘IO
  • 解决方式

    • 延迟redo log和binlog的刷盘时机,减少IO次数

      • 设置组:延迟binlog的刷盘时机,多等一些数据一起进行刷盘

      • 将 sync_binlog 设置为大于 1 的值,多等几个事务一起刷盘

      • redo log buffer里的redo log写到redo log文件,让操作系统进行刷盘

    • 如果掉电就可能丢数据 page cache不安全

索引

面试题

  • 索引底层使用了什么数据结构和算法?

    • 考虑IO次数和时间复杂度
  • 为什么MySQL InnoDB选择B+树作为索引数据结构?

    • 更矮胖

    • 插入删除简单

    • 便于范围查找

  • 什么时候适用索引?

  • 什么时候不需要创建索引?

  • 什么情况下索引会失效?

  • 有什么优化索引的方法?

概念

  • 索引是数据的目录

分类

  • 数据结构分类

    • B+树索引

      • 优势

        • 相比于 B 树二叉树或 Hash 索引结构
      • 如何进行聚簇索引和二级索引

    • Hash索引

    • Full-text索引

  • 物理存储分类

    • 聚簇索引

    • 二级索引

      • 回表
  • 字段特性分类

    • 主键索引

    • 唯一索引

    • 前缀索引

  • 字段个数分类

    • 单列索引

    • 联合索引

      • 最左匹配原则

      • 全局有序和局部有序

      • 优化:select * from order where status = 1 order by create_time asc(文件排序 filesort)

创建索引的条件

  • 什么时候适用索引?

    • 唯一性限制

    • where语句调用频繁

    • order by和group by调用频繁

  • 什么时候不需要创建索引?

    • 不需要where、order by、group by

    • 重复数据多

    • 表中数据少

    • 更新频繁的数据

索引失效

  • 失效的条件

    • 使用左或者左右模糊匹配:like %xx,like %xx%

      • B+树是按照索引值有序存储,前缀匹配
    • 对索引列进行计算,函数等操作

      • 索引使用的是原始值,不是计算后的值

      • 隐式类型转换

        • 索引值不能变,字符串->数字
    • 联合索引不遵循最左匹配原则

      • 可能全是索引字段导致直接查询联合索引树进行覆盖索引

      • 索引下推

        • 过滤不符合要求的,减少回表次数
    • where后的条件,or前是索引列,or后不是

优化索引

  • 前缀索引优化

    • 使用某个字段中字符串的前几个字符建立索引

    • 对于较长的字符索引进行了更进一步的优化

  • 覆盖索引优化

    • 建立联合索引,这样可以避免回表带来的IO性能损耗
  • 主键索引最好自增

    • 新增一个节点直接向后插入,避免页分裂
  • 索引最好为NOT NULL

    • 索引列存在空会导致优化器进行优化难度增加

    • NULL无意义,但是会占据额外的存储空间

  • 防止索引失效

适合索引的数据结构

  • 要求

    • 尽可能少的磁盘IO

    • 进行高效的单点查找和范围查找

  • 数据结构

    • 二分查找

    • 二叉搜索树

    • AVL树

    • 红黑树

    • B树

      • 用户的记录数据的大小很有可能远远超过了索引数据,因此需要更多次磁盘IO找到有效数据

      • 使用 B 树来做范围查询,需要使用中序遍历,这会涉及多个节点的磁盘 I/O 问题

    • B+树

      • 单点查询

        • B树可能可以直接就找到信息,但是浮动大

        • B+树相较而言更加矮胖,磁盘IO次数少

      • 插入和删除效率

        • B树操作可能需要大变结构

        • B+树操作只需要操作叶子节点

      • 范围查询

        • B树没有链表,需要多次IO进行范围查询

        • B+树叶子节点使用链表连接,直接横向搜索

count

  • 按照性能排序

    • count(*) = count(1) > count(主键字段) > count(字段)
  • count(主键字段)执行过程

  • count(1)和count(*)执行过程

  • count(字段)执行过程

  • 优先使用二级索引,其次聚簇索引

  • 优化count(*)

    • 使用近似值explain select…

    • 额外维护一个统计次数的表

因为存在两个索引,一个是主键索引,一个是非唯一索引(二级索引),所以在加锁时,同时会对这两个索引都加锁,但是对主键索引加锁的时候,只有满足查询条件的记录才会对它们的主键索引加锁

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/39366.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OpenCV 张正友标定法(二)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 在之前的博客OpenCV 张氏标定法中,我们没有考虑镜头畸变等因素,因此计算出的内参与外参均是理想情况下的数值,而如果我们考虑到镜头的畸变: 我们就需要考虑使用最小二乘法最小化像素坐标的重投影误差(上述所求…

重温react-10(函数组件和类组件的ref获取方式)

App.js的代码 06是函数组件 07是类组件 import React, { useEffect, useRef } from react; import LearnFunction06 from ./LearnFunction06; // 函数组件和类组件的ref使用方式 import LearnFunction07 from ./LearnFunction07; // 函数组件和类组件的ref使用方式 export de…

dell服务器RAID5磁盘阵列出现故障的解决过程二——热备盘制作与坏盘替换过程

目录 背景方案概念全局热备&#xff08;Global Hot Spare&#xff09;&#xff1a;独立热备&#xff08;Dedicated Hot Spare&#xff09;&#xff1a; 过程8号制作成热备清除配置制作独立热备热备顶替坏盘直接rebuild 更换2号盘2号热备 注意注意事项foreign状态要先清除配置 背…

【Mac】Boxy SVG for Mac(矢量图编辑器)及同类型软件介绍

软件介绍 Boxy SVG 是一款功能强大的矢量图形编辑器&#xff0c;专门为 macOS 平台设计开发。它主要用于创建和编辑 SVG&#xff08;可缩放矢量图形&#xff09;文件&#xff0c;是设计师和开发者们制作矢量图形的理想工具。 以下是关于 Boxy SVG 的主要特点和功能&#xff1a…

Rural Access Index (RAI)农村通达指数

农村通达指数&#xff08;RAI&#xff09; 简介 农村通达指数&#xff08;RAI&#xff09;是全球交通领域最重要的发展指标之一。它是目前可持续发展目标中唯一一个直接衡量农村通达性的指标&#xff0c;通过评估农村人口的四季道路通达性来实现。在 2015 年作为可持续发展目…

路由LLM:优化模型调用的成本与效率

引言 在最近的一些视频和讨论中&#xff0c;我们经常提到使用较便宜和较快的模型来替代一些昂贵的大型语言模型&#xff08;LLM&#xff09;。这种方法的一个主要原因是看到许多人在不必要的场合调用如GPT-4或Claude Opus等高级模型&#xff0c;从而浪费了大量资金。而事实上&…

IDEA 编译单个Java文件

文章目录 一、class文件的生成位置二、编译单个文件编译项目报错Error:java: 无效的源发行版: 8 一、class文件的生成位置 file->project structure->Modules 二、编译单个文件 选中文件&#xff0c;点击recompile 编译项目报错 Error:java: 无效的源发行版: 8 Fi…

2024最新PyCharm安装教程(附激活码)

今天讲解的是PyCharm安装教程 一、软件简介 PyCharm是一款Python IDE&#xff0c;其带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具&#xff0c;比如&#xff0c; 调试、语法高亮、Project管理、代码跳转、智能提示、自动完成、单元测试、版本控制等等。此外…

字符串和正则表达式踩坑

// 中石化加油卡号格式&#xff1a;以 100011 开头共19位public static final String ZHONGSHIYOU_OIL_CARD_PATTERN "^100011\\d{13}$";// 中石油加油卡号格式&#xff1a;以90、95、70开头共16位public static final String ZHONGYOU_OIL_CARD_PATTERN "^(9…

使用 urllib OpenSSL 时遇到的问题及解决

题意&#xff1a; ImportError: urllib3 v2.0 only supports OpenSSL 1.1.1, currently the ssl module is compiled with LibreSSL 2.8.3 当前使用的 urllib3 版本&#xff08;v2.0&#xff09;仅支持 OpenSSL 1.1.1 或更高版本&#xff0c;但你的 Python 环境中的 ssl 模块…

安装opencv-python出错,怎么办?

安装opencv-python出错 解决方法&#xff1a; 具体版本号&#xff0c;python3.6对应的就是4.3.0.38 pip install opencv-python4.3.0.38 -i https://pypi.tuna.tsinghua.edu.cn/simple

《梦醒蝶飞:释放Excel函数与公式的力量》8.5 COUNTIFS函数

8.5 COUNTIFS函数 COUNTIFS函数是Excel中的一种多条件计数函数&#xff0c;用于统计同时满足多个条件的单元格数量。它是COUNTIF函数的增强版&#xff0c;允许在一个函数中使用多个条件。 8.5.1 函数简介 COUNTIFS函数用于统计符合多个条件的单元格数量。它在数据分析中非常…

Sentinel链路流控模式失效的解决方法

解决方法 1、在pom.xml中增加sentinel-web-servlet的依赖&#xff0c;我使用的版本是1.7.1 <dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-web-servlet</artifactId> </dependency>2、在项目中添加一个FilterCon…

uniapp应用如何实现传感器数据采集和分析

UniApp是一种跨平台的应用开发框架&#xff0c;它支持在同一份代码中同时开发iOS、Android、H5等多个平台的应用。在UniApp中实现传感器数据采集和分析的过程可以分为以下几个步骤&#xff1a; 引入相关插件或库 UniApp通过插件或库的形式扩展功能。对于传感器数据采集和分析&…

MySQL 9.0 GA 来了!

2024 年 7 月 2 日&#xff0c;MySQL 9.0 GA 版本正式发布。还记得 MySQL 8.0 版本正式发布于 2018 年 4 月 19 日&#xff0c;中间经过了 6 年之久&#xff0c;MySQL 官方终于发布了大版本号变更得 9.0 版本&#xff0c;接下来由我给大家介绍 MySQL 在 9.0 版本中有哪些新的变…

C++学习笔记---POCO库

在Windows系统中安装POCO 1&#xff09;安装OpenSSL POCO编译安装依赖OpenSSL&#xff0c;如果未安装OpenSSL则应该先安装OpenSSL。 假设将OpenSSL安装在C:\OpenSSL-Win64&#xff0c;将C:\OpenSSL-Win64、C:\OpenSSL-Win64\lib添加到PATH环境变量中2&#xff09;安装POCO 将p…

C++11新特性【下】{lambda表达式、可变模板参数、包装器}

一、lambda表达式 在C98中&#xff0c;如果想要对一个数据集合中的元素进行排序&#xff0c;可以使用std::sort方法。如果待排序元素为自定义类型&#xff0c;需要用户定义排序时的比较规则&#xff0c;随着C语法的发展&#xff0c;人们开始觉得上面的写法太复杂了&#xff0c…

1-讯飞星火大模型API调用示例解析

1官网链接 比赛官网&#xff1a;2024 iFLYTEK A.I.开发者大赛-讯飞开放平台 (xfyun.cn)&#xff1b;控制台官网&#xff1a;控制台-讯飞开放平台 (xfyun.cn)&#xff1b; 2星火模型python调用示例 示例链接&#xff1a;https://xfyun-doc.xfyun.cn/lc-sp-PythonDemo-17163704…

了解MySQL【事务】的功能:确保数据完整性的关键技术

在数据库管理中&#xff0c;事务是确保数据完整性和一致性的核心机制。特别是对MySQL这样广泛应用的开源数据库系统&#xff0c;掌握事务的使用至关重要。在这篇文章中&#xff0c;我们将全面探讨MySQL事务的工作原理、ACID属性、隔离级别以及最佳实践&#xff0c;从而帮助开发…

宝塔Linux面板配置环境 + 创建站点

一、安装 &#xff08;1&#xff09;进入宝塔官网 https://www.bt.cn/new/index.html &#xff08;2&#xff09;点击“ 立即免费安装 ”&#xff0c;选择 Centos安装脚本 &#xff08;3&#xff09;进入 ssh 输入以下命令安装宝塔 yum install -y wget && wget -O …