MySQL禁用ONLY_FULL_GROUP_BY模式的三種方法
這是由于MySQL啟用了ONLY_FULL_GROUP_BY模式導(dǎo)致的。以下是禁用該模式的三種方法,結(jié)合你的需求選擇最合適的方案:
一、臨時(shí)禁用(重啟后失效)
1.當(dāng)前會(huì)話禁用
直接在SQL客戶端執(zhí)行以下命令,僅對(duì)當(dāng)前數(shù)據(jù)庫連接有效:
SET SESSION sql_mode = (SELECT REPLACE(@@sql_mode, 'ONLY_FULL_GROUP_BY', ''));
2.全局禁用
修改全局設(shè)置,對(duì)所有新連接生效(但重啟MySQL服務(wù)后失效):
SET GLOBAL sql_mode = (SELECT REPLACE(@@GLOBAL.sql_mode, 'ONLY_FULL_GROUP_BY', ''));
二、永久禁用(需修改配置文件)
步驟:
找到MySQL配置文件:
- Windows:
my.ini(通常位于MySQL安裝目錄或C:\ProgramData\MySQL\MySQL Server 8.0)。 - Linux:
/etc/my.cnf或/etc/mysql/mysql.conf.d/mysqld.cnf。
- Windows:
修改配置: 在
[mysqld]部分添加或修改sql_mode,移除ONLY_FULL_GROUP_BY。 示例配置:[mysqld] sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
重啟MySQL服務(wù):
- Windows:通過服務(wù)管理器重啟MySQL服務(wù)。
- Linux:執(zhí)行
sudo systemctl restart mysql。
驗(yàn)證:
SELECT @@GLOBAL.sql_mode;
確認(rèn)輸出中不再包含
ONLY_FULL_GROUP_BY。
三、查詢優(yōu)化(推薦)
如果不想修改數(shù)據(jù)庫配置,可以通過以下方式調(diào)整SQL語句,使其符合ONLY_FULL_GROUP_BY規(guī)則:
1.確保所有非聚合列在GROUP BY中
修改你的SQL,將SELECT列表中的非聚合列(如network_type)添加到GROUP BY子句:
GROUP BY t.id, cdn.cdn_device_network.network_type
2.使用聚合函數(shù)包裹非聚合列
對(duì)不需要分組的列使用ANY_VALUE()函數(shù):
SELECT ANY_VALUE(network_type) AS network_type, ... FROM ... GROUP BY t.id
四、注意事項(xiàng)
- 數(shù)據(jù)一致性風(fēng)險(xiǎn):禁用ONLY_FULL_GROUP_BY可能導(dǎo)致查詢結(jié)果不確定,建議生產(chǎn)環(huán)境謹(jǐn)慎操作。
- 配置文件優(yōu)先級(jí):確保修改的配置文件是MySQL實(shí)際加載的(可能存在多個(gè)配置文件,優(yōu)先級(jí)以最后加載的為準(zhǔn)) 。
- MySQL版本差異:MySQL 8.0默認(rèn)啟用此模式,需通過配置文件永久修改 。
總結(jié)
- 快速修復(fù):臨時(shí)禁用(方法一)適合緊急調(diào)試。
- 長期方案:修改配置文件(方法二)確保重啟后生效。
- 最佳實(shí)踐:優(yōu)化SQL查詢(方法三),避免依賴數(shù)據(jù)庫模式
到此這篇關(guān)于MySQL禁用ONLY_FULL_GROUP_BY模式的三種方法的文章就介紹到這了,更多相關(guān)MySQL禁用ONLY_FULL_GROUP_BY內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
mysql 記錄不存在時(shí)插入 記錄存在則更新的實(shí)現(xiàn)方法
相信很多人都需要用到這個(gè)語句,請(qǐng)看下文:(在4.1以后的版本才有效)2008-08-08
count(1)、count(*)與count(列名)的執(zhí)行區(qū)別詳解
這篇文章主要介紹了count(1)、count(*)與count(列名)的執(zhí)行區(qū)別詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11
MySQL中Buffer?Pool內(nèi)存結(jié)構(gòu)詳情
這篇文章主要介紹了MySQL中Buffer?Pool內(nèi)存結(jié)構(gòu)詳情,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-09-09

