随笔分类 -  MySQL

MySQL 函数查询返回NULL
摘要:create table user(id bigint primary key auto_increment, age int); gorm使用函数查询时,通过IFNULL来确保查询不到记录时有默认值。 max函数 select max(age) from user; select IFNULL(m 阅读全文

posted @ 2024-09-08 15:31 王景迁 阅读(24) 评论(0) 推荐(0)

MySQL分页查询优化
摘要:CREATE TABLE teacher( `id` BIGINT(20) NOT NULL AUTO_INCREMENT PRIMARY KEY, `teacher_id` CHAR(30) NOT NULL UNIQUE KEY, `name` VARCHAR(30) NOT NULL )ENG 阅读全文

posted @ 2024-05-03 21:18 王景迁 阅读(42) 评论(0) 推荐(0)

MySQL问题 left join查询错误
摘要:使用left join时,左表字段值必须有,右表字段值可以没有。where加右表字段,匹配非空值时,右表字段不能是NULL,必须有具体值。 阅读全文

posted @ 2024-04-04 14:18 王景迁 阅读(63) 评论(0) 推荐(0)

MySQL问题 远程连接数被占满
摘要:设置MySQL单用户远程最大连接数是3 set GLOBAL max_user_connections=3; 查看连接数限制 show variables like '%connections'; 其中,max_connections控制远程连接数和本地连接数总和上限。 尝试继续创建远程连接失败 情 阅读全文

posted @ 2024-04-04 14:14 王景迁 阅读(115) 评论(0) 推荐(0)

MySQL问题 GROUP_CONCAT截断
摘要:问题现象 CREATE DATABASE test CHARACTER SET utf8; USE test; CREATE TABLE user ( id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, name varchar(500), sex tinyint 阅读全文

posted @ 2024-04-04 14:06 王景迁 阅读(69) 评论(0) 推荐(0)

MySQL问题 SQL优先级导致执行错误
摘要:问题现象 select * from x where a = 1 or b = 2 and c = 3执行结果不符合预期。 问题分析 and优先级高于or,相当于select * from x where a = 1 or (b = 2 and c = 3)。 解决问题 改成select * fro 阅读全文

posted @ 2024-04-04 14:01 王景迁 阅读(17) 评论(0) 推荐(0)

MySQL问题 tinyint返回true
摘要:问题现象 字段类型是tinyint(1),数据库中值是100,但是从数据库中返回的值是Java Boolean true,即整型数据在MySQL中返回结果是true。 问题分析 tinyint占用1个字节,范围是-128~127,代表bool值时,0表示False,非0表示True。如果存储真实值, 阅读全文

posted @ 2024-04-04 13:57 王景迁 阅读(85) 评论(0) 推荐(0)

MySQL主备
摘要:MySQL主备同步原理1 备库io_thread通过长连接获取主库的binlog2 备库sql_thread执行binlog 节点A和B之间互为主备关系,都认为对方是主,切换时不用再修改主备关系。解决双M binlog循环同步问题1 A更新的事务,binlog记的是A的server id2 B同步后 阅读全文

posted @ 2023-07-16 14:25 王景迁 阅读(139) 评论(0) 推荐(0)

MySQL锁
摘要:全局锁 对数据库加锁,典型使用场景是全库备份。加全局读锁,整库只读:Flush tables with read lock (FTWRL)。 针对全库只读,不使用set global readonly=true,使用FTWRL的原因:1. readonly的值可能用来做逻辑判断,例如判断是主库还是备 阅读全文

posted @ 2023-07-16 14:23 王景迁 阅读(27) 评论(0) 推荐(0)

MySQL自增值
摘要:InnoDB引擎1 自增值的保存机制MySQL 5.7及之前的版本自增值保存在了内存里面,MySQL 8.0版本才有自增值持久化能力(把自增值的变更记录在了redo log,重启后依靠redo log回复)。每次重启后,把自增值的最大值max(id)+1作为这个表当前的自增值。例如,一个表最大的id 阅读全文

posted @ 2023-07-16 14:08 王景迁 阅读(73) 评论(0) 推荐(0)

MySQL索引
摘要:主键索引和普通索引结构上的区别 每一个索引在InnoDB里面对应一棵B+树。有一个主键列为ID的表,表中有字段k,在k上有索引。CREATE TABLE T ( id int PRIMARY KEY, k int NOT NULL, name varchar(16), INDEX(k)) ENGIN 阅读全文

posted @ 2023-07-16 14:05 王景迁 阅读(35) 评论(0) 推荐(0)

SQL语法
摘要:join LEFT JOIN连接左表中的所有行,即使在右表中找不到匹配的行也显示出来,用NULL值代替。RIGHT JOIN和LEFT JOIN在功能上是等效的,只要表顺序被切换。INNER JOIN中ON条件等同于WHERE子句中的条件。 group by group by在where后面,gro 阅读全文

posted @ 2023-07-16 13:56 王景迁 阅读(40) 评论(0) 推荐(0)

MySQL事务
摘要:事务是在存储引擎层实现的。 ACID特性 1.原子性事务中的所有操作要么全部提交成功,要么全部失败回滚。2.一致性数据库总是从一个一致性状态转换到另外一个一致性状态。3.隔离性两个事务之间的隔离程度,与隔离级别有关。4.持久性事务提交后所做的修改会永久保存到数据库中。 隔离性与隔离级别 隔离级别越高 阅读全文

posted @ 2023-06-08 14:58 王景迁 阅读(40) 评论(0) 推荐(0)

MySQL逻辑架构图
摘要:整体架构 MySQL可以分为Server层和存储引擎层两部分。不同的存储引擎(不同的表可以设置不同的存储引擎)共用一个Server层(从连接器到执行器)。 查询流程 连接器 Command列显示Sleep表示空闲连接。 如果客户端太长时间没动静,那么连接器会自动将它断开,由参数wait_timeou 阅读全文

posted @ 2023-06-04 15:39 王景迁 阅读(100) 评论(0) 推荐(0)

构造MySQL错误server has gone away
摘要:interactive_timeout和wait_timeout默认值是28800秒即8小时。 手动修改interactive_timeout时间为3秒 set global interactive_timeout=3; 重新进入MySQL查看值 interactive_timeout和wait_t 阅读全文

posted @ 2023-04-09 08:07 王景迁 阅读(36) 评论(0) 推荐(0)

搭建主备MySQL
摘要:拉取镜像 docker pull mysql:5.7 创建主备容器 docker run -itd --name mysql-master --cpu-period=1000000 --cpu-quota=500000 --memory 512M --rm -e MYSQL_ROOT_PASSWOR 阅读全文

posted @ 2023-03-26 20:54 王景迁 阅读(77) 评论(0) 推荐(0)

查询正在执行的SQL的数据库名和表名
摘要:创建限制0.5个CPU和0.5G内存的MySQL容器 docker run -itd --name mysql --cpu-quota=50000 --memory 512M --rm -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql:5.7 创建pers 阅读全文

posted @ 2023-02-12 19:33 王景迁 阅读(89) 评论(0) 推荐(0)

MySQL字符集
摘要:查看字符集 show charset like 'utf8%'; 每种字符集有多种比较规则,有默认的比较规则。utf8:一个字符最多占用3个字节,默认比较规则是utf8_general_ci。utf8mb4:一个字符最多占用4个字节,默认比较规则是utf8mb4_general_ci。比较规则中,c 阅读全文

posted @ 2022-12-17 09:35 王景迁 阅读(105) 评论(0) 推荐(0)

导航