我是靠谱客的博主 复杂魔镜,最近开发中收集的这篇文章主要介绍SQL问题记录SQL问题记录,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

SQL问题记录

问题一

权限问题:java.sql.SQLException: The user specified as a definer (‘root’@‘%’) does not exist

解决方案:

在Navicat for MySQL中按F6进入命令列界面
mysql> grant all privileges on *.* to root@"%" identified by ".";
mysql> flush privileges;

问题二

SQL语句中使用了 group by分组函数报错

**产生原因:**在MySQL数据库版本为5.7以上的版本,默认开启了 ONLY_FULL_GROUP_BY SQL模式,在此模式下,对于group by操作,如果在select语句中的查询列没有在group by中出现,那么这个SQL就是非法的,因为列不在group by语句中,所以设置了sql_mode=only_full_group_by的数据库,在使用group by时就会报错

解决方案:

方案一:临时使用,重启后失效

在Navicat中,输入下列SQL语句进行查询:SELECT @@GLOBAL.sql_mode;
查询结果如下:
	ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
通过上面的查询结果,可以看到 开启了 ONLY_FULL_GROUP_BY 模式,这里第一种解决方案就是,去除 ONLY_FULL_GROUP_BY,重新设置值。
解决方法如下:
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';
执行完上面的SQL语句之后,再次执行报错的SQL语句,发现可以正常运行了。

方案二:

除了上面的手动设置sql_mode值之外,还可以在 MySQL 的配置文件中进行设置。
1、对于 Linux系统,进到 /etc/my.cnf 文件下,查询sql_mode字段,由于在配置文件中未找到这个关键字,所以我在[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
添加完之后,保存退出,重启 MySQL 即可生效。

2、对于windows系统,进行 MySQL安装目录下,找到 my.ini 文件,同样在配置文件中搜索sql_mode关键字,若未搜索到,则需要在  [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
添加完毕之后,保存退出,然后重启一下 MySQL 服务即可生效。

最后

以上就是复杂魔镜为你收集整理的SQL问题记录SQL问题记录的全部内容,希望文章能够帮你解决SQL问题记录SQL问题记录所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部