关于后端:MySQL错误1055

36次阅读

共计 1225 个字符,预计需要花费 4 分钟才能阅读完成。

问题形容:在 MySQL 数据库下,执行 SQL 插入语句报错。错误信息如下:

谬误起因:在 MySQL5.7 之后,sql_mode 中默认存在 ONLY_FULL_GROUP_BY,SQL 语句未通过 ONLY_FULL_GROUP_BY 语义查看所以报错。

ONLY_FULL_GROUP_BY:ONLY_FULL_GROUP_BY 要求 select 语句中查问进去的列必须是明确的(其余语句也是一样)。

以 SQL 语句 select columes from table group by list 为例:columns 必须是汇集函数或者在 group by 后的表达式 list 中,并且 list 中必须蕴含主键,否则也会报错。

insert、update、delete 语句都会报错(但不影响 SQL 语句的执行),因为这三种语句执行之前也会执行查问操作。

以主键为 id 的表为例:

SELECT count(1) FROM customer GROUP BY name; 该 SQL 执行胜利,因为 count 是汇集函数;

SELECT FROM customer GROUP BY name; 该 SQL 执行失败,因为 中蕴含主键 id,而 group by 后的表达式中并没有蕴含 id

SELECT name FROM customer GROUP BY name; 该 SQL 执行胜利,因为 name 蕴含在 group by 后的表达式中

SELECT name, contact FROM customer GROUP BY name; 该 SQL 执行失败,因为 contact 没有蕴含在 group by 后的表达式中

解决方案:

一、永恒解决

1)在 MySQL 下执行 SELECT @@sql_mode 语句

2)将查问后果中的 ONLY_FULL_GROUP_BY 去掉而后复制,关上 MySQL 的配置文件,将 sql_mode 的值设置为复制的值

(若没有 sql_mode 在 [mysqld] 下方增加一行即可)。

MySQL 配置文件所在位置:安装版 可通过 windows 服务所对应 mysql 启动项,查看其对应属性 -> 可执行文件门路,获取 my.ini 门路。

 免安装版 个别在其根目录下。(默认是 my-default.ini,必须将名字改为 my.ini 能力失效)

3)从新 MySQL 服务即可失效

二、只在以后会话中解决,从新进入 MySQL 后生效

1)在 MySQL 下执行 SELECT @@sql_mode 语句

2)将查问后果中的 ONLY_FULL_GROUP_BY 去掉而后复制,而后执行set sql_mode = ‘ 批改后的值 ’

三、只在以后服务中解决,从新 MySQL 服务后生效

1)解决形式同办法二,只是在 select 和 set 时增加 global 关键字。具体可查看下图

参考:《2020 最新 Java 根底精讲视频教程和学习路线!》
链接:https://www.cnblogs.com/haoyu…

正文完
 0