如何解決MySQL?this?is?incompatible?with?sql_mode=only_full_group_by問(wèn)題
MySQL this is incompatible with sql_mode=only_full_group_by
代碼示例:
在MySQL中,ONLY_FULL_GROUP_BY
是一個(gè)SQL模式設(shè)置,它要求在使用GROUP BY
時(shí),SELECT
語(yǔ)句中引用的所有列必須在GROUP BY
子句中明確指定,或者是聚合函數(shù)的一部分。
這個(gè)模式的目的是為了防止產(chǎn)生不確定的查詢結(jié)果。
如果你遇到了ONLY_FULL_GROUP_BY
的錯(cuò)誤,以下是一些解決方案:
1.修改SQL語(yǔ)句
- 確保
SELECT
列表中的所有列要么包含在GROUP BY
子句中,要么作為聚合函數(shù)的一部分。 - 例如,如果你的查詢是這樣的:
SELECT column1, column2 FROM table GROUP BY column1;
- 你需要將
column2
也加入到GROUP BY
子句中 - 或者對(duì)
column2
使用聚合函數(shù) - 如
MAX(column2)
或SUM(column2)
2.使用聚合函數(shù)
- 對(duì)于
SELECT
列表中不在GROUP BY
子句中的列 - 可以使用聚合函數(shù),如
MAX()
,MIN()
,SUM()
,COUNT()
等
3.禁用ONLY_FULL_GROUP_BY
- 你可以在會(huì)話級(jí)別或全局級(jí)別禁用
ONLY_FULL_GROUP_BY
。 - 這可以通過(guò)以下命令完成:
SET SESSION sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
- 或者,你可以修改MySQL的配置文件(例如
my.cnf
或my.ini
) - 去掉
ONLY_FULL_GROUP_BY
:
[mysqld] sql_mode = NO_AUTO_VALUE_ON_ZERO,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
- 修改配置文件后,需要重啟MySQL服務(wù)以使更改生效。
4.使用ANY_VALUE()函數(shù)
ANY_VALUE()
函數(shù)可以用來(lái)選擇每個(gè)分組的任意值- 這在某種程度上可以繞過(guò)
ONLY_FULL_GROUP_BY
的限制
5.永久修改sql_mode
- 在某些情況下,如果你不希望每次重啟MySQL服務(wù)后都要重新設(shè)置
sql_mode
,你可以將更改永久化到MySQL的配置文件中。 - 請(qǐng)注意,禁用
ONLY_FULL_GROUP_BY
可能會(huì)讓你的查詢結(jié)果變得不確定,因?yàn)镸ySQL將不再?gòu)?qiáng)制要求GROUP BY
子句包含所有非聚合列。 - 因此,在禁用這個(gè)模式之前,最好先評(píng)估一下它對(duì)你的查詢邏輯和結(jié)果的影響。
如果你正在使用MySQL 8.0或更高版本,并且嘗試修改sql_mode
時(shí)遇到了問(wèn)題,比如出現(xiàn)了錯(cuò)誤:
ERROR 1231 (42000): Variable 'sql_mode' can't be set to the value of 'NO_AUTO_CREATE_USER'
- 這是因?yàn)樵贛ySQL 8.0及以上版本中,
NO_AUTO_CREATE_USER
已經(jīng)被移除。 - 在這種情況下,你需要從
sql_mode
中移除這個(gè)值。 - 在處理這個(gè)問(wèn)題時(shí),建議先嘗試修改SQL語(yǔ)句以符合
ONLY_FULL_GROUP_BY
的要求,因?yàn)檫@是最安全的做法,可以避免潛在的數(shù)據(jù)一致性問(wèn)題。 - 如果這不可能或者不切實(shí)際,那么再考慮禁用
ONLY_FULL_GROUP_BY
。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- 詳解MySQL的sql_mode查詢與設(shè)置
- MySQL配置sql_mode的參數(shù)屬性作用
- mysql ONLY_FULL_GROUP_BY設(shè)置sql_mode無(wú)效排查問(wèn)題(windows)
- mysql5.7版本因?yàn)閟ql_mode設(shè)置導(dǎo)致的問(wèn)題以及解決
- MySQL?中的?SQL_MODE?設(shè)置方法ANSI_QUOTES?選項(xiàng)解析與應(yīng)用小結(jié)
- MySQL報(bào)錯(cuò)sql_mode=only_full_group_by的問(wèn)題解決
- 淺談mysql的sql_mode可能會(huì)限制你的查詢
相關(guān)文章
MySQL分庫(kù)分表后路由策略設(shè)計(jì)詳情
這篇文章主要介紹了MySQL分庫(kù)分表后路由策略設(shè)計(jì)詳情,分庫(kù)分表后設(shè)計(jì)到的第一個(gè)問(wèn)題就是,如何選擇路由key,應(yīng)該如何對(duì)key進(jìn)行路由2022-08-08SQL實(shí)現(xiàn)Excel的10個(gè)常用功能的示例詳解
SQL,數(shù)據(jù)分析崗的必備技能,你可以不懂Python,R,不懂可視化,不懂機(jī)器學(xué)習(xí)。但SQL,你必須懂。本文為大家總結(jié)了SQL實(shí)現(xiàn)Excel的10個(gè)常用功能的示例代碼,感興趣的可以了解一下2022-07-07sql語(yǔ)句示例之case?when作為where條件
這篇文章主要給大家介紹了關(guān)于sql語(yǔ)句示例之case?when作為where條件的相關(guān)資料,在SQL語(yǔ)句中CASE WHEN子句是根據(jù)條件表達(dá)式的結(jié)果來(lái)執(zhí)行不同的邏輯操作,它使用在WHERE子句中,以根據(jù)特定的條件在查詢結(jié)果中過(guò)濾數(shù)據(jù),需要的朋友可以參考下2023-08-08MySQL AUTO_INCREMENT 主鍵自增長(zhǎng)的實(shí)現(xiàn)
本文主要介紹了MySQL AUTO_INCREMENT 主鍵自增長(zhǎng)的實(shí)現(xiàn),每增加一條記錄,主鍵會(huì)自動(dòng)以相同的步長(zhǎng)進(jìn)行增長(zhǎng),具有一定的參考價(jià)值,感興趣的可以了解一下2023-11-11My Sql 1067錯(cuò)誤與編碼問(wèn)題的解決方案
My Sql 大部分都是用綠色版(解壓版) 然后注冊(cè)服務(wù)簡(jiǎn)單方便,但是配置文件也很讓人糾結(jié),下面小編給大家?guī)?lái)了My Sql 1067錯(cuò)誤與編碼問(wèn)題的解決方案,感興趣的朋友參考下吧2016-11-11mysql id從1開始自增 快速解決id不連續(xù)的問(wèn)題
這篇文章主要介紹了mysql id從1開始自增 快速解決id不連續(xù)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07MySQL 邏輯備份與恢復(fù)測(cè)試的相關(guān)總結(jié)
數(shù)據(jù)庫(kù)邏輯備份就是備份軟件按照我們最初所設(shè)計(jì)的邏輯關(guān)系,以數(shù)據(jù)庫(kù)的邏輯結(jié)構(gòu)對(duì)象為單位,將數(shù)據(jù)庫(kù)中的數(shù)據(jù)按照預(yù)定義的邏輯關(guān)聯(lián)格式一條一條生成相關(guān)的文本文件,以達(dá)到備份的目的。本文將具體介紹MySQL 邏輯備份的相關(guān)概念及如何做恢復(fù)測(cè)試。2021-05-05