
MySQL
文章平均质量分 86
恋喵大鲤鱼
一条不止于编码的鱼。
展开
-
MySQL COUNT(*) COUNT(1) 与 COUNT(列) 的区别
那么,InnoDB 循环遍历聚簇索引(主键索引),将读取到的记录返回给 server 层,但是不会读取记录中的任何字段的值,因为 COUNT 函数的参数是 1,不是字段,所以不需要读取记录中的字段值。如果表里只有主键索引,没有二级索引时,那么,InnoDB 循环遍历聚簇索引,将读取到的记录返回给 server 层,然后读取记录中的 id 值,就会 id 值判断是否为 NULL,如果不为 NULL(主键不能为 NULL),就将 count 变量加 1。最后将 count 变量的值发送给客户端。原创 2024-05-08 21:49:14 · 1328 阅读 · 0 评论 -
MySQL ORDER BY 实现原理
如果当 sort buffer 空间无法容纳我们需要排序的数据时,这时会采用另外一种临时文件的方式进行排序,临时文件排序采用归并排序的算法,首先会把需要排序的数据拆分到多个临时文件里同步进行排序操作,然后把多个排好序的文件合并成一个结果集返回给客户端,不过在临时文件里排序相对于在 sort buffer 里排序来说,性能会慢很多,因为一个是在内存里操作,一个是在磁盘里操作。总的来说,MySQL 的 ORDER BY 实现原理是复杂的,它依赖于查询优化器的决策,可能涉及索引排序、内存排序和磁盘排序等策略。原创 2024-01-25 09:23:32 · 1433 阅读 · 0 评论 -
MySQL 批量插入记录报 Error 1390 (HY000)
MySQL 服务端之所以报 Error 1390 (HY000) 错误,原因是不允许一次插入过多的记录。更深层次的原因是 MySQL SQL 语句的占位符数量有上限,最大值为 16bits 无符号整数的最大值(65535)。该错误属于 MySQL 服务端错误,可惜的是,官方文档并未给出详细的错误原因,只给出了错误码的简短描述。如果是 INSERT 语句,插入 n 条记录,每条记录有 m 列,则要求 m*n < 65535。既然不允许一次插入太多记录,那么可以改为分批插入,而不是一次性插入所有数据。原创 2023-11-25 17:29:01 · 1851 阅读 · 0 评论 -
ERROR 1062 (23000) at line 1: Duplicate entry ‘XXX‘ for key ‘XXX‘
如果调高该值,MySQL同时将增加heap表的大小,可达到提高联接查询速度的效果,建议尽量优化查询,要确保查询过程中生成的临时表在内存中,避免临时表过大导致生成基于硬盘的MyISAM表。如果内存临时表超出了限制,MySQL 就会自动地把它转化为基于磁盘的 MyISAM 表,存储在指定的 tmpdir 目录下。定义了用户可以创建的内存表(memory table)的大小,可用来计算内存表的最大行数值。可以查看大小,默认是16MB,可调到64-256MB最佳,线程独占,太大可能导致内存不够,I/O堵塞。原创 2017-07-17 20:00:07 · 8654 阅读 · 0 评论 -
MySQL CHAR 和 VARCHAR 的区别
在 MySQL 中,CHAR 和 VARCHAR 是两种不同的文本数据类型,CHAR 和 VARCHAR 类型声明时需要指定一个长度,该长度指示您希望存储的最大字符数。例如,CHAR(30) 最多可以容纳 30 个字符。它们虽然相似,但存在一些重要的区别。原创 2023-10-31 14:13:32 · 400 阅读 · 0 评论 -
MySQL 主从复制原理与问题
对应的,主库会启动一个 log dump 线程,根据传过来的(file,pos)在本地的binlog中查找,并把剩下的 binlog 发送给slave。主节点会为每一个从节点创建一个 dump 线程。因为如果主节点有太多的从节点,就会损耗一部分性能用于 replication ,那么我们可以让 3~5 个从节点连接主节点,其它从节点作为二级或者三级与从节点连接。当主节点有多个从节点时,主节点会为每一个当前连接的从节点建一个 log dump 线程,而每个从节点都有自己的 I/O 线程和 SQL 线程。原创 2023-10-19 14:13:14 · 1420 阅读 · 0 评论 -
MySQL Cluster 简介
MySQL Cluster 是官方推出的基于 NDB(Network DataBase)存储引擎的高可用、可伸缩的分布式数据库系统。高可用:MySQL Cluster 具有内置的高可用性功能,可以自动检测和恢复故障。它支持故障检测和节点恢复,以确保集群中的数据和服务可用性。分布式存储:NDB 存储引擎支持将数据分布在多个节点上,实现了数据的分布式存储。这意味着数据可以水平扩展,从而提高了存储容量和性能。原创 2023-10-07 21:07:13 · 1084 阅读 · 0 评论 -
TenDB Cluster 简介
TenDB Cluster 是腾讯游戏 CROS DBA 团队提供的 MySQL 分布式关系型数据库解决方案。主要特点包括:透明分库分表、高可用的 MySQL 集群服务,透明及在线的扩容及缩容;使得开发者可以仅专注于业务逻辑的开发及运营,无需编写数据分片逻辑。在海量用户并发情况下,也无须关心存储层的负载压力。TenDB Cluster 集群主要包括三个核心组件:TSpider,TenDB 和 Tdbctl。原创 2023-10-07 19:13:32 · 265 阅读 · 0 评论 -
MySQL 判断 JSON 数组是否包含某元素
假设您正在使用 GORM v2 和 MySQL 数据库,并且您的数据表中有一个名为 data 的 JSON 类型的列,其中存储了一个字符串数组,您想要查询该数组是否包含某个元素。在 MySQL 中,并没有内置的数组数据类型。但是,MySQL 提供了一些可以实现类似数组功能的机制,如使用字符串来存储由逗号分隔的值,使用 JSON 类型来存储数组数据等。JSON_CONTAINS 函数还可以判断 JSON 对象中某个字段的值是否为指定的值,具体用法可参见 MySQL 官网的介绍。原创 2023-02-16 15:02:38 · 5713 阅读 · 0 评论 -
MySQL JSON 数组用于 WHERE IN 子句
在某些情况下,我们希望在查询中使用 IN 子句来匹配 JSON 数组中的元素。例如,我们有一个包含用户 ID 的 JSON 数组 [1, 2, 3],我们希望查询所有这些用户的信息。在这种情况下,我们需要将 JSON 数组转换为 IN 子句的形式。MySQL 提供了 JSON_TABLE 函数来处理这种转换。JSON_TABLE 函数接受一个 JSON 数组和一个列名,将 JSON 数组的每个元素作为一行返回。然后我们可以将返回的结果作为子查询,并在主查询中使用 IN 子句。原创 2023-09-01 16:55:16 · 1435 阅读 · 0 评论 -
MySQL 临时表与内存表的区别
在 MySQL 中,Temporary Table(临时表)和 Memory Table(内存表)是两种不同的表类型,它们有一些重要的区别和用途。原创 2023-08-21 15:33:12 · 789 阅读 · 0 评论 -
MySQL 数据库的设计和命令行模式下建立详细过程
主键(Primary Key):唯一标识一条记录,不能有重复,不允许为空。外键(Foreign Key):表的外键是另一表的主键, 外键可以有重复, 可以是空值。唯一键( Unique Key):唯一标识一条记录,不能有重复,可以为空。索引(Index):该字段可以有重复值记录,可以有空值,如果是唯一索引,那么就不可以有重复的记录,可以有空值。原创 2016-06-07 23:11:38 · 5325 阅读 · 0 评论 -
C++ 利用 MySQL API 连接和操作数据库
基于ODBC的应用程序,对数据库操作不依赖于具体的DBMS,不直接与DBMS打交道,所有数据库操作由对应DBMS的ODBC驱动程序完成,即:系统中不需要安装DBMS系统,如SQL SERVER 2005,但必须有SQL SERVER 2005的ODBC驱动程序,然后在ODBC管理器中注册数据源后,就可以在应用程序中通过ODBC API访问该数据库。ADO具有跨系统平台特性,它直接对数据库进行操作,即系统中必须有DBMS,但不需要驱动程序,不需要注册数据源,所以具有很好的可移植性。下面是数据表的详细情况。原创 2016-06-12 22:53:11 · 14608 阅读 · 0 评论 -
MySQL 判断 JSON 数组是否相等
只有长度相等且包含另一个数组中的所有元素时,两个数组才可判为相等。其中 JSON_ARRAY 函数可以将一个或多个值创建为 JSON 数组,如果指定多个值,则表示要同时包含多个值条件才为 true。定义的 JSON 规范,主要有 JSON 对象 和 JSON 数组两种类型。当作用于 JSON 数组时,可判断数组是否包含指定的元素。如果严格判断两个 JSON 数组是否相等,直接比较即可。如果需要判断 JSON 数组是否相等,该如何判断呢?当作用于 JSON 数组时,可获取的是数组元素个数。原创 2023-07-19 19:38:25 · 2312 阅读 · 2 评论