DevsDawn
DevsDawn

mysql
文章归档

解决MySQL ERROR 3029 错误

ERROR 3029 (HY000): Expression #1 of ORDER BY contains aggregate function and applies to the result of a non-aggregated query 这个错误是指在使用聚合函数(如sum, count, max, min等)进行排序时,没有将排序的列包含在分组的列中,或者排序的列与分组的列没有函数依赖关系。这种情况下,MySQL无法确定如何对分组后的结果进行排序,因此会报错。这个错误与MySQL的sql_mode设置有关,如果sql_mode包含only_full_group_by,那么就会出现这个错误。 有两种解决办法: - 一种…

2023-10-19  

MySQL Incorrect key file for table 报错排查

近期一个项目在运行过程中数据库经常出现Incorrect key file for table 'xxx.MYI'; try to repair it. MySQL Errno: 126的错误,导致项目完全无法正常运行。业主急死,打了十几个电话过来,被迫在下班的路上继续加班:joy:。 首先通过搜索找到了这两种可能性: 一种可能的原因是您的查询获取的数据大于您的/tmp文件夹(即用于存储临时表的文件夹)的大小。解决方法是更改/tmp文件夹的位置,或者增加/tmp文件夹的空间。 另一种可能的原因是表损坏。解决方法是重新创建或修复…

2023-06-12  

解决MySQL in select子查询无法使用索引问题

近期在编写一个业务逻辑,需要从订单表中找出所有手机号属于某一个用户的订单,而每个用户可关联多个手机号,于是有以下的查询语句: select * from mall_order where phone in (select phone from user_phone where user_id = #{id]}) 以上mall_order表的phone字段和user_phone的user_id字段均已添加索引。 然而,通过对以上语句explain后发现索引失效,语句对mail_order进行了全表查询,并没有使用到已经添加的phone索引。 经过排查,发现mall_order表和user_phone表的phone字…

2022-12-07  

解决23:59:59.999时间存入MySQL变为00:00:00问题

问题 在使用Hutool的DateUtil.endOfDay方法时,生成的时间戳为2022-09-23 23:59:59.999,在写入MySQL数据库后字段值会变为2022-09-24 00:00:00。 原因 TIMESTAMP类型字段存储精度默认精确到秒,在存入带有毫秒数据时,毫秒数大于500时会自动进位。同理,DATETIME类型默认也是精确到秒的: UPDATE `test_table` SET `test_time` = '2022-09-23 23:59:59.999' WHERE `id` = 1; // 2022-09-24 00:00:00 UPDATE `test_table` SET `test_time` = '2022-09-23 23:59:59.499' WHERE `id…

2022-09-19  

ThinkPHP 6 多模型下事务处理

mysql下,事务不是针对某个特定的表或者特定的模型的,因此在多模型的情况下,不需要针对每个模型分别startTrans、commit和rollback。即使模型中有继承startTrans方法,可以通过Model::startTrans();启动事务,但其作用等同于Db:startTrans();。因此可以直接写为以下形式。 通过测试,在出现异常时,通过图中自增值可看出(自增值在rollback时也会增加),三个模型尝试新增数据都被rollback。同时把Table3中的name字段改为test233的操作也没有成功。 <?php namespace app\cont…

2020-01-20  

MySQL Table doesn't exist in engine 解决方法

数据表设置了外键,在phpMyAdmin中显示该表使用中,点击访问表时提示Table doesn't exist in engine。 mysql日志显示: 2019-08-24 14:32:25 616 [Warning] InnoDB: Load table 'xxx' failed, the table has missing foreign key indexes. Turn off 'foreign_key_checks' and try again. 2019-08-24 14:32:25 616 [Warning] InnoDB: Cannot open table xxx from the internal data dictionary of InnoDB though the .frm file for the table exists. See http://dev.mysql.com/…

2019-08-24  

利用PHP把MySQL数据库内所有表编码转换为utf8mb4

<?php $mysql = mysql_connect(MYSQL_HOST,MYSQL_USERNAME,MYSQL_PASSWORD); if (!$mysql) echo "Failed to connect mysql!"; mysql_select_db(MYSQL_DBNAME,$mysql); $result = mysql_query("SHOW TABLE STATUS"); while($row = mysql_fetch_row($result)) { mysql_query("ALTER TABLE " . $row[0] . " CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci"); } ?>

2018-02-22