前言
对软件系统的理解和认知,决定了开发者使用它们的高度,下面来简单聊聊关于mysql的一些常识。
引擎
myisam | innodb | |
---|---|---|
编码和排序规则
charset指定数据的编码格式;collation指定数据的排序规则。
utf8mb4(most bytes 4)才是真正的utf8。
时间戳
修改字段为当前时间戳,需要用alter table change column
语法。
ALTER TABLE `table` CHANGE COLUMN `column` `column` DATETIME NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'comment';
ALTER TABLE `table` CHANGE COLUMN `column` `column` DATETIME NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'comment';
In子句的长度
oracle的in子句的参数有长度限制(1k);而mysql的in子句参数没有长度限制。
rewriteBatchedStatements
批量操作很慢时,连接url加这个参数。参考mysql和文章。
https://www.sohu.com/a/292105115_505827
数据库卡死
select * from information_schema.`PROCESSLIST` where command='Query' and time>300 order by time desc;
select concat('kill ',id,';') from information_schema.`PROCESSLIST` where command='Query' and time>300 order by time desc;
分页
分页时,要明确分页的维度。最简单的是根据单表的主键,有时又需要根据其他维度来分页,此时要先查询要分页的维度,然后在查记录,分两次查询。
比如,如果一张商品名称表(id,商品,语言,名称),如果按主键维度,是简单的,size是10就是10;如果是按商品维度,因为一个商品可能有多国语言的名称,给定size为10,就会查出大于10的记录。