欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL 5.7升級8.0報異常:ONLY_FULL_GROUP_BY的問題解決

 更新時間:2024年11月27日 11:02:54   作者:圖南隨筆  
本文主要介紹了MySQL 5.7升級8.0報異常的問題解決,主要是ONLY_FULL_GROUP_BY,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

異常

MySQL8.0默認的SQL模式包含了ONLY_FULL_GROUP_BY,MySQL5.7默認的SQL模式也包含了ONLY_FULL_GROUP_BY,但是MySQL5.6是不包含的,有的項目從5.6升級到5.7的時候,把SQL模式中的ONLY_FULL_GROUP_BY去掉了,再升級到8.0時,可能會報下面的異常:

Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 
'java_test.student.subject' which is not functionally dependent on columns in GROUP BY 
clause; this is incompatible with sql_mode=only_full_group_by

ONLY_FULL_GROUP_BY

ONLY_FULL_GROUP_BY是MySQL的一個SQL模式,它要求在使用GROUP BY語句時,SELECT列表、HAVING條件或ORDER BY列表中的每個列,要么是聚合函數的一部分(如COUNT(), SUM(), AVG()等),要么必須在GROUP BY子句中明確指定。這一模式的設計初衷是增強查詢的準確性和可預測性,避免因為列的不明確引用而導致的數據錯誤或不一致。

異常解決

假設我們有一張student表,包含name(姓名)、subject(科目)、score(分數)三個字段,在ONLY_FULL_GROUP_BY啟用時,我們嘗試運行如下查詢,就會報上面的異常:

select name, subject, score from student group by name

解決方法有兩個:

1、修改sql

使用聚合函數處理非GROUP BY列,或將其加入到GROUP BY子句中,常見的聚合函數包括SUM(求和)、AVG(平均值)、MAX(最大值)、MIN(最小值)、COUNT(計數)等。

select name, subject, sum(score) from student group by name, subject

2、修改sql_mode

1)修改當前會話的sql_mode

查看當前會話的sql_mode:

select @@sql_mode;
或者
select @@session.sql_mode;

修改當前會話的sql_mode:

SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
或者
SET session sql_mode=(SELECT REPLACE(@@session.sql_mode,'ONLY_FULL_GROUP_BY',''));

2)修改全局配置的sql_mode

查看全局配置的sql_mode:

select @@global.sql_mode;

修改全局配置的sql_mode:

SET global sql_mode=(SELECT REPLACE(@@global.sql_mode,'ONLY_FULL_GROUP_BY',''));

3)永久修改sql_mode

若想永久修改sql_mode,需要修改MySQL配置文件(my.cnf或my.ini)

A、打開MySQL配置文件,具體路徑根據安裝方式和操作系統(tǒng)不同,通常位于:

Linux: /etc/my.cnf 或 /etc/mysql/my.cnf

Windows: C:\ProgramData\MySQL\MySQL Server X.Y\my.ini

使用文本編輯器打開文件

B、找到[mysqld]部分,添加或修改如下行:

[mysqld] 
sql_mode=新模式

將新模式替換為你希望設置的值

MySQL配置文件的修改,重啟MySQL服務后才能生效。

注:

1)建議寫sql時盡量規(guī)范,在使用GROUP BY語句時,SELECT列表、HAVING條件或ORDER BY列表中的每個列,要么是聚合函數的一部分(如COUNT(), SUM(), AVG()等),要么必須在GROUP BY子句中明確指定。

2)當我們需要修改sql_mode時,一般情況下,先修改全局配置,再修改配置文件,這樣修改后,即使MySQL服務重啟后sql_mode也是最新的。

到此這篇關于MySQL 5.7升級8.0報異常:ONLY_FULL_GROUP_BY的問題解決的文章就介紹到這了,更多相關MySQL 5.7升級8.0報異常內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 一次docker登錄mysql報錯問題的實戰(zhàn)記錄

    一次docker登錄mysql報錯問題的實戰(zhàn)記錄

    這篇文章主要給大家介紹了一次docker登錄mysql報錯問題的實戰(zhàn)記錄,文中通過實例代碼介紹的非常詳細,對大家學習或者使用docker具有一定的參考學習價值,需要的朋友可以參考下
    2022-01-01
  • MySQL中的case?when中對于NULL值判斷的坑及解決

    MySQL中的case?when中對于NULL值判斷的坑及解決

    這篇文章主要介紹了MySQL中的case?when中對于NULL值判斷的坑及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • 基于MySql驗證的vsftpd虛擬用戶

    基于MySql驗證的vsftpd虛擬用戶

    這篇文章主要介紹了基于MySql驗證的vsftpd虛擬用戶,文章包括mysql安裝及ftp服務器安裝過程,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-11-11
  • mysql 8.0.12 安裝使用教程

    mysql 8.0.12 安裝使用教程

    這篇文章主要為大家詳細介紹了mysql 8.0.12 安裝使用教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • MySQL CHAR和VARCHAR該如何選擇

    MySQL CHAR和VARCHAR該如何選擇

    MySQL 支持字符串的數據類型并不多,但是卻有多種變化形式。MySQL 5.0以后更是支持每一列字符串可以有自己的字符集以及排序規(guī)則,這使得數據表設計更為復雜。本篇介紹字符類型的數據表字段 CHAR 和 VARCHAR 該如何選擇。
    2021-05-05
  • mysql 5.7.16 winx64安裝配置方法圖文教程

    mysql 5.7.16 winx64安裝配置方法圖文教程

    這篇文章主要為大家分享了mysql 5.7.16winx64安裝配置方法圖文教程,感興趣的朋友可以參考一下
    2016-11-11
  • Mysql提升索引效率優(yōu)化的八種方法總結

    Mysql提升索引效率優(yōu)化的八種方法總結

    索引實際上也是一張表,保存了主鍵和索引的字段,并且指向實體表的記錄,所以索引也是需要占用空間的,這篇文章主要給大家介紹了關于Mysql提升索引效率優(yōu)化的八種方法,需要的朋友可以參考下
    2024-04-04
  • mysql 單機數據庫優(yōu)化的一些實踐

    mysql 單機數據庫優(yōu)化的一些實踐

    這篇文章主要介紹了mysql 單機數據庫優(yōu)化的一些實踐的相關資料,需要的朋友可以參考下
    2016-09-09
  • MySQL內存使用的查看方式詳解

    MySQL內存使用的查看方式詳解

    MySQL中內存分為全局內存和線程內存兩大部分(其實并不全部,只是影響比較大的 部分),下面這篇文章主要給大家介紹了關于MySQL內存使用的查看方式,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2019-01-01
  • 從MySQL的源碼剖析Innodb buffer的命中率計算

    從MySQL的源碼剖析Innodb buffer的命中率計算

    這篇文章主要介紹了從MySQL的源碼剖析Innodb buffer的命中率計算,作者結合C語言寫的算法來分析innodb buffer hit Ratios,需要的朋友可以參考下
    2015-05-05

最新評論