1. 程式人生 > >mysql-1055錯誤 MySQL [Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause

mysql-1055錯誤 MySQL [Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause

mysql-1055錯誤

MySQL [Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause

想著給資料庫裡插入一條測試資料,居然報錯了可奇葩的是報錯了資料居然還插入進去了。

看了一下原來是因為mysql版本的問題。。

在MySQL5.7之後,sql_mode中預設有一條ONLY_FULL_GROUP_BY,SQL語句未通過ONLY_FULL_GROUP_BY語義檢查所以報錯。

而這行 ONLY_FULL_GROUP_BY 的意思是:如果在SELECT時後面所查詢出的列,沒有在GROUP BY中出現,那麼這個SQL是不合法的。

舉個例子:一張表 有 ID ,name ,type這三個欄位

SELECT name,type  FROM table_name  GROUP BY  type    //這條語句會報錯,應為name沒有出現在GROUP BY後

SELECT * FROM table_name GROUP BY `name`;//這條語句也會報錯,因為*中包含主鍵id,而group by後的表示式中並沒有包含id和type

也許會有人問那為啥插入資料也會報這個錯誤呢,那是因為資料庫在insert、update、delete這三種語句執行之前也會執行查詢操作。但不會影響insert、update、delete這三種語句的執行,所以才會出現報錯了還有資料的情況

解決辦法就是吧 ONLY_FULL_GROUP_BYsql_mode中去掉

linux中解決:

  • 首先先查出sql_mode的值,在找到my.cnf這個檔案所在位置,vim 修改my.cnf這個檔案
select @@sql_mode 
mysql --help | grep my.cnf 
vim /etc/my.cnf 
  • 將sql_mode的值修改為 剛剛查詢出來的值(去掉ONLY_FULL_GROUP_BY
//像這樣
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

windows中同樣解決:

  • 首先先查出sql_mode的值
select @@sql_mode 
  • 其次找到mysql的配置檔案 my.ini 將剛剛查詢出來的值放到[mysqld]

在這裡插入圖片描述

  • 然後重啟mysql