MySQL常见错误汇总

1、问题重现:

update stu set score = 80 where id in(select s.id from stu s where sex = 0)


[Err] 1093 - You can't specify target table 'stu' for update in FROM clause

原因:不能在from子句中使用目标表进行更新操作

解决办法如下:

update stu set score = 80 where id in (
select tmp.id from (select s.id from stu s where s.sex = 0)tmp)

2、delete 同时删除多张表,根据数据库的版本来确定是否能用别名

查询数据库版本

select version();

使用别名的写法

delete c,s 
from stu as s
left join class as c on c.stu_id = s.id
where s.id = 2

不使用别名的写法

delete stu,class
from stu
left join class on class.stu_id = stu.id
where stu.id = 3

3、sql_mode = only_full_group_by

问题重现:当数据库开启了only_full_group_by之后,在数据库中执行group by的语句,会报错,因为group by之后的跟的字段没有包含select之后查询的所有的字段。

解决办法1:暂时性解决办法,数据库服务重启如下配置仍会失效

set @@global.sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
set sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

解决办法2:永久性解决办法,数据库服务重启配置仍然有效,在my.ini文件对应位置[mysqld]加上如下配置

sql_mode =STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

解决办法3:在无法修改数据库配置的前提下,可以在yaml文件配置数据源的地方加上如下配置.

connectionInitSqls:["set SESSION sql_mode=REPLACE(@@SESSION.sql_mode,'ONLY_FULL_GROUP_BY',"")"]

4、修改系统的默认时区

问题重现:获取服务当前时间存入数据库,存入数据库的时间比当前时间少8个钟

解决办法:

TimeZone.setDefault(TimeZone.getTimeZone("GMT+8"));

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值