MySQL查詢出現(xiàn)1055錯誤的原因及解決方法
當(dāng)SQL語句查詢報(bào)1055錯誤時的解決方法
報(bào)錯內(nèi)容如下
報(bào)錯原因
1.SQL語句中使用了group by
,并且不需要分組的字段沒有加上any_value()函數(shù)
2.MySQL數(shù)據(jù)庫版本是大于5.7,報(bào)錯信息中最后有一句sql_mode=ONLY_FULL_GROUP_BY,是因?yàn)镸ySQL數(shù)據(jù)庫的配置中sql_mode包含ONLY_FULL_GROUP_BY,導(dǎo)致使用group by
會報(bào)錯
ONLY_FULL_GROUP_BY 含義:對于GROUP BY聚合操作,如果在SELECT中的列,沒有在GROUP BY中出現(xiàn),那么這個SQL是不合法的,因?yàn)榱胁辉贕ROUP BY從句中。在嚴(yán)格模式下,不要讓GROUP BY部分中的查詢指向未選擇的列,否則報(bào)錯。
解決辦法
解決辦法共計(jì)3種,兩種需要改配置,一種不需要
1.不修改任何配置文件,但給不需要分組的字段上加上any_value()函數(shù)
SELECT any_value(id),value FROM table_name group by value;
這種方法不需要改配置,但是每條使用group by
的SQL語句都要加上any_value()函數(shù)
2.臨時更改配置,下次重啟電腦或者M(jìn)ySQL服務(wù)時會失效
首先在數(shù)據(jù)庫中查詢下列代碼
select @@global.sql_mode
得到如下結(jié)果:
發(fā)現(xiàn)里面有ONLY_FULL_GROUP_BY
在查詢中繼續(xù)執(zhí)行下列代碼,其中等號后面的就是剛才查到的代碼去掉 ONLY_FULL_GROUP_BY 的部分
set global sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
這時再重新測試之前報(bào)錯的SQL語句,應(yīng)該會可用了
如果不可用,再執(zhí)行下列兩條語句:
select @@sql_mode
和
set sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
就可以了
3.永久更改配置,下次重啟電腦或者M(jìn)ySQL服務(wù)時不會失效
第一步,先運(yùn)行下列語句
select @@sql_mode
第二步,打開MySQL的配置文件(window的時my.ini,一般會在安裝目錄的根目錄,Linux是my.cnf,一般會放
在/etc/my.cnf,/etc/mysql/my.cnf。如果找不到,可以用find命令查找)
第三步,在配置文件中找到 [mysqld]
,在他下面填入
[mysqld] sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
第四步,停止之后再重啟MySQL
停止mysqlsystemctl stop mysql
或者net stop mysql
重啟mysqlsystemctl restart mysql
或者net start mysql
window用戶可以在服務(wù)中重啟MySQL:win+R,輸入services.msc,點(diǎn)確定找到mysql服務(wù),重啟即可解決問題
總結(jié)
到此這篇關(guān)于MySQL查詢出現(xiàn)1055錯誤的原因及解決方法的文章就介紹到這了,更多相關(guān)MySQL查詢報(bào)錯1055內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
linux實(shí)現(xiàn)mysql數(shù)據(jù)庫每天自動備份定時備份
備份是容災(zāi)的基礎(chǔ),是指為防止系統(tǒng)出現(xiàn)操作失誤或系統(tǒng)故障導(dǎo)致數(shù)據(jù)丟失,而將全部或部分?jǐn)?shù)據(jù)集合從應(yīng)用主機(jī)的硬盤或陣列復(fù)制到其它的存儲介質(zhì)的過程。這篇文章主要介紹了linux實(shí)現(xiàn)mysql數(shù)據(jù)庫每天自動備份定時備份,需要的朋友可以參考下2017-09-09docker 部署mysql詳細(xì)過程(docker部署常見應(yīng)用)
這篇文章主要介紹了docker 部署mysql之docker部署常見應(yīng)用,本文以docker部署mysql5.7.26為例,通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-08-08Mysql數(shù)據(jù)庫中數(shù)據(jù)表的優(yōu)化、外鍵與三范式用法實(shí)例分析
這篇文章主要介紹了Mysql數(shù)據(jù)庫中數(shù)據(jù)表的優(yōu)化、外鍵與三范式用法,結(jié)合實(shí)例形式較為詳細(xì)的分析了Mysql數(shù)據(jù)庫中數(shù)據(jù)表的優(yōu)化、外鍵與三范式相關(guān)概念、原理、用法及操作注意事項(xiàng),需要的朋友可以參考下2019-11-11