摘要:create table user(id bigint primary key auto_increment, age int); gorm使用函数查询时,通过IFNULL来确保查询不到记录时有默认值。 max函数 select max(age) from user; select IFNULL(m
阅读全文
摘要: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
阅读全文
摘要:使用left join时,左表字段值必须有,右表字段值可以没有。where加右表字段,匹配非空值时,右表字段不能是NULL,必须有具体值。
阅读全文
摘要:设置MySQL单用户远程最大连接数是3 set GLOBAL max_user_connections=3; 查看连接数限制 show variables like '%connections'; 其中,max_connections控制远程连接数和本地连接数总和上限。 尝试继续创建远程连接失败 情
阅读全文
摘要:问题现象 CREATE DATABASE test CHARACTER SET utf8; USE test; CREATE TABLE user ( id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, name varchar(500), sex tinyint
阅读全文
摘要:问题现象 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
阅读全文
摘要:问题现象 字段类型是tinyint(1),数据库中值是100,但是从数据库中返回的值是Java Boolean true,即整型数据在MySQL中返回结果是true。 问题分析 tinyint占用1个字节,范围是-128~127,代表bool值时,0表示False,非0表示True。如果存储真实值,
阅读全文
摘要:MySQL主备同步原理1 备库io_thread通过长连接获取主库的binlog2 备库sql_thread执行binlog 节点A和B之间互为主备关系,都认为对方是主,切换时不用再修改主备关系。解决双M binlog循环同步问题1 A更新的事务,binlog记的是A的server id2 B同步后
阅读全文
摘要:全局锁 对数据库加锁,典型使用场景是全库备份。加全局读锁,整库只读:Flush tables with read lock (FTWRL)。 针对全库只读,不使用set global readonly=true,使用FTWRL的原因:1. readonly的值可能用来做逻辑判断,例如判断是主库还是备
阅读全文
摘要:InnoDB引擎1 自增值的保存机制MySQL 5.7及之前的版本自增值保存在了内存里面,MySQL 8.0版本才有自增值持久化能力(把自增值的变更记录在了redo log,重启后依靠redo log回复)。每次重启后,把自增值的最大值max(id)+1作为这个表当前的自增值。例如,一个表最大的id
阅读全文
摘要:主键索引和普通索引结构上的区别 每一个索引在InnoDB里面对应一棵B+树。有一个主键列为ID的表,表中有字段k,在k上有索引。CREATE TABLE T ( id int PRIMARY KEY, k int NOT NULL, name varchar(16), INDEX(k)) ENGIN
阅读全文
摘要:join LEFT JOIN连接左表中的所有行,即使在右表中找不到匹配的行也显示出来,用NULL值代替。RIGHT JOIN和LEFT JOIN在功能上是等效的,只要表顺序被切换。INNER JOIN中ON条件等同于WHERE子句中的条件。 group by group by在where后面,gro
阅读全文
摘要:事务是在存储引擎层实现的。 ACID特性 1.原子性事务中的所有操作要么全部提交成功,要么全部失败回滚。2.一致性数据库总是从一个一致性状态转换到另外一个一致性状态。3.隔离性两个事务之间的隔离程度,与隔离级别有关。4.持久性事务提交后所做的修改会永久保存到数据库中。 隔离性与隔离级别 隔离级别越高
阅读全文
摘要:整体架构 MySQL可以分为Server层和存储引擎层两部分。不同的存储引擎(不同的表可以设置不同的存储引擎)共用一个Server层(从连接器到执行器)。 查询流程 连接器 Command列显示Sleep表示空闲连接。 如果客户端太长时间没动静,那么连接器会自动将它断开,由参数wait_timeou
阅读全文
摘要:interactive_timeout和wait_timeout默认值是28800秒即8小时。 手动修改interactive_timeout时间为3秒 set global interactive_timeout=3; 重新进入MySQL查看值 interactive_timeout和wait_t
阅读全文
摘要:拉取镜像 docker pull mysql:5.7 创建主备容器 docker run -itd --name mysql-master --cpu-period=1000000 --cpu-quota=500000 --memory 512M --rm -e MYSQL_ROOT_PASSWOR
阅读全文
摘要:创建限制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
阅读全文
摘要:查看字符集 show charset like 'utf8%'; 每种字符集有多种比较规则,有默认的比较规则。utf8:一个字符最多占用3个字节,默认比较规则是utf8_general_ci。utf8mb4:一个字符最多占用4个字节,默认比较规则是utf8mb4_general_ci。比较规则中,c
阅读全文