欧美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,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

異常

MySQL8.0默認(rèn)的SQL模式包含了ONLY_FULL_GROUP_BY,MySQL5.7默認(rèn)的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列表中的每個列,要么是聚合函數(shù)的一部分(如COUNT(), SUM(), AVG()等),要么必須在GROUP BY子句中明確指定。這一模式的設(shè)計初衷是增強(qiáng)查詢的準(zhǔn)確性和可預(yù)測性,避免因為列的不明確引用而導(dǎo)致的數(shù)據(jù)錯誤或不一致。

異常解決

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

select name, subject, score from student group by name

解決方法有兩個:

1、修改sql

使用聚合函數(shù)處理非GROUP BY列,或?qū)⑵浼尤氲紾ROUP BY子句中,常見的聚合函數(shù)包括SUM(求和)、AVG(平均值)、MAX(最大值)、MIN(最小值)、COUNT(計數(shù))等。

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

2、修改sql_mode

1)修改當(dāng)前會話的sql_mode

查看當(dāng)前會話的sql_mode:

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

修改當(dāng)前會話的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配置文件,具體路徑根據(jù)安裝方式和操作系統(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=新模式

將新模式替換為你希望設(shè)置的值

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

注:

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

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

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

相關(guān)文章

  • dubbo中zookeeper請求超時問題:mybatis+spring連接mysql8.0.15的配置

    dubbo中zookeeper請求超時問題:mybatis+spring連接mysql8.0.15的配置

    這篇文章主要介紹了dubbo中zookeeper請求超時問題:mybatis+spring連接mysql8.0.15的配置,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-01-01
  • 一文帶你深入了解?MySQL的鎖機(jī)制

    一文帶你深入了解?MySQL的鎖機(jī)制

    在數(shù)據(jù)庫系統(tǒng)中,同時有多個用戶或進(jìn)程訪問數(shù)據(jù)是常見的情況,為了確保數(shù)據(jù)的完整性和一致性,數(shù)據(jù)庫管理系統(tǒng)引入了鎖機(jī)制,本文將深入探討?MySQL?鎖機(jī)制,幫助您理解鎖的分類、實現(xiàn)方式以及使用場景和優(yōu)化策略,需要的朋友可以參考下
    2023-05-05
  • Mysql主從同步如何重置

    Mysql主從同步如何重置

    在MySQL數(shù)據(jù)庫運(yùn)維中,遇到主從數(shù)據(jù)庫數(shù)據(jù)不一致時需要進(jìn)行同步重置,本文介紹了主從同步重置的具體步驟:首先對從庫操作,包括停止slave、重置從庫;其次對主庫進(jìn)行操作,包括重置主庫同步設(shè)置、鎖定主庫;最后從庫導(dǎo)入主庫數(shù)據(jù)
    2024-10-10
  • mysql整數(shù)數(shù)據(jù)類型深入解析

    mysql整數(shù)數(shù)據(jù)類型深入解析

    本篇文章是對mysql中的整數(shù)數(shù)據(jù)類型進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • MySQL如何使用union all獲得并集排序

    MySQL如何使用union all獲得并集排序

    這篇文章主要介紹了MySQL如何使用union all獲得并集排序,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-03-03
  • C#如何在海量數(shù)據(jù)下的高效讀取寫入MySQL

    C#如何在海量數(shù)據(jù)下的高效讀取寫入MySQL

    這篇文章主要介紹了C#如何在海量數(shù)據(jù)下的高效讀取寫入MySQL的相關(guān)資料,需要的朋友可以參考下
    2016-12-12
  • MySQL數(shù)據(jù)庫管理常用命令小結(jié)

    MySQL數(shù)據(jù)庫管理常用命令小結(jié)

    MySQL數(shù)據(jù)庫是一種開放源代碼的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),MySQL數(shù)據(jù)庫系統(tǒng)使用最常用的數(shù)據(jù)庫管理語言--結(jié)構(gòu)化查詢語言(SQL)進(jìn)行數(shù)據(jù)庫管理,MySQL數(shù)據(jù)庫管理有它自己獨特的使用命令,下面為您介紹MySQL數(shù)據(jù)庫管理常用命令。
    2011-03-03
  • mysql錯誤處理之ERROR 1665 (HY000)

    mysql錯誤處理之ERROR 1665 (HY000)

    最近一直在mysql的各個版本直接徘徊,這中間遇到了各種各樣的錯誤,將已經(jīng)處理完畢的幾個錯誤整理了一下,分享給大家,這次我們來看看錯誤提示 ERROR 1665 (HY000)
    2014-07-07
  • SQL語句中LEFT JOIN的ON和WHERE有什么區(qū)別

    SQL語句中LEFT JOIN的ON和WHERE有什么區(qū)別

    這篇文章主要介紹了SQL語句中LEFT JOIN的ON和WHERE之間的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2022-12-12
  • MySQL登錄、訪問及退出操作實戰(zhàn)指南

    MySQL登錄、訪問及退出操作實戰(zhàn)指南

    當(dāng)我們要使用mysql時,一定要了解mysql的登錄、訪問及退出,下面這篇文章主要給大家介紹了關(guān)于MySQL登錄、訪問及退出操作的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-10-10

最新評論