MySQL 批量生成并插入数据

之前有过批量导入有规则的数据记录的情况,即设备信息批量导入。厂家会给出一个编码规则和范围,然后通过创建的函数过程(PROCEDURE)执行导入。这几天在研究 MySQL左联多个表做分组查询 时,需要批量生成一批数据,来检验查询的结果和效率。之前的一个批量导入过程结构大概像这样:CREATE DEFINER=`schema_name`@`%` PROCEDURE `procedure_name`(I

- 阅读全文 -

MySQL左联多个表做分组查询数据重复问题解决

经常会遇到 MySQL 左联很多个表的情况,大部分情况下,只要主表外键与每个左联表都是一对一或者多对一(hasOne)的关系,那么结果记录数就不会存在问题。但是当与左联表关系是一对多的情况下,结果会出现重复记录。这种情况除了是以左联表作为目标记录,一般都会做去重处理。通过聚合函数(比如:COUNT、SUM、AVG、MIN、MAX 等)结合 group by 分组查询可以实现去重目的。select

- 阅读全文 -

项目实时数据大屏展示导致数据库阻塞问题诊断

项目之前做过一个大屏数据展示的单页,需要展示实时的订单数、订单金额,还有设备、商铺方面的排行榜。因为前、后端开发对于 SQL 数据查询阻塞缺乏认知(也是因为懒),将单页中的所有数据都通过一个接口返回,前端每 10s 刷新一次数据。后来发现了数据查询的阻塞问题,后端使用了 redis 缓存查询结果 1 个小时。这本来是可以缓解一些数据阻塞问题,因为按照理想状态,只要第一次查询到了数据,后续 1 个小

- 阅读全文 -

mysql 插入中文报错:incorrect string value for column

分别检查数据库、表和字段的字符集编码及排序规则:前两者都为 utf8 或 utf8mb4(支持二进制存储,表情包存储)数据库字符集使用 utf8mb4表字符集使用 utf8mb4最后一个字段的字符集为 latin 之类的,但观察了以下,发现所有表的字段字符集都是这个,这意味着如果要让之后不再报这个错误,需要修改所有的字段的字符集。网上找了一个 修改所有字段字符集 sql :-- 查看某个数据库的表

- 阅读全文 -

myql 报错:subquery return more than 1 row

原因:在 select 查询中某字段使用了子查询获取信息,但因为子查询返回数据多余 1 行,导致无法获取数据解决:将子查询结果限制在 1 行limit 1 解决。

- 阅读全文 -

windows 下 mysql 8.0 修改用户密码

目标增加一个可以远程登录的账号,并设置一下密码和权限。步骤在不记得初始密码的时候,可以使用步骤一来启用一个跳过权限表认证的 mysqld 服务。启用一个跳过权限表认证的 mysqld 服务需要以管理员的身份运行命令行,先将系统中的 mysql 服务关闭: net stop mysql。但我使用的是 phpstudy 开启的 mysql 8.0 服务,这个指令返回了找不到服务,需要从面板里关闭。关闭

- 阅读全文 -

Mysql float/double 类型数据查询小数位数不对(精度失常)

原先项目有关金额的部分数据都会定义成 float 或 double 类型,可以肯定的是 32 位存储空间 float 和 64 位存储空间的 double 具有更高的精度。但在实际对数据进行加工,比如 sum 求和等得到的数据会出现更多位的小数。比如手动计算结果 7.75 使用了 sum 函数得到 7.750000059604645。从数字层面上可以很清晰的觉察到数据的精度发生了变化,但这却并不怪

- 阅读全文 -

mysql 创建存储过程 (procedure)

网上找到一篇 使用Navicat for MySQL创建存储过程 的文章,通过查询窗口执行创建 procedure 的语句。CREATE PROCEDURE `insert_boxes`(IN total int) BEGIN declare i int default 1000; while i < total+1500 do insert into boxes (id) values (

- 阅读全文 -