mysql-1055錯誤 MySQL [Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause
阿新 • • 發佈:2018-12-30
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_BY
從 sql_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