mysql casual fukuoka vol.4 20141021

17
ONLY_FULL_GROUP_BY について MySQL Casual Talks in Fukuoka vol.4 2014/10/ 21

Upload: -

Post on 20-Jun-2015

1.240 views

Category:

Technology


2 download

DESCRIPTION

MySQL Casual Talks in Fukuoka vol.4 ONLY_FULL_GROUP_BYについて 関連ブログエントリ http://matsumana.info/blog/2014/10/22/mysql-casual-fukuoka-vol4/

TRANSCRIPT

Page 1: MySQL Casual Fukuoka vol.4 20141021

ONLY_FULL_GROUP_BYについて

MySQL Casual Talks in Fukuoka vol.4 2014/10/21

Page 2: MySQL Casual Fukuoka vol.4 20141021

自己紹介

名前: 松崎 学

所属: 株式会社キャム http://www.cam-net.co.jp/ (SaaSでERPサービスを提供中)

Twitter: matsumana

職業:ソフトウェアエンジニア (プログラマ、ITインフラ全般)

Page 3: MySQL Casual Fukuoka vol.4 20141021

MySQL 5.7.5のリリースノートを見て

気になった箇所について 調べてみました

Page 4: MySQL Casual Fukuoka vol.4 20141021

Changes in MySQL 5.7.5 (2014-09-25, Milestone 15) http://dev.mysql.com/doc/relnotes/mysql/5.7/en/news-5-7-5.html

Page 5: MySQL Casual Fukuoka vol.4 20141021

MySQL 5.7 Reference Manualを確認してみるhttp://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sql-mode-setting

Page 6: MySQL Casual Fukuoka vol.4 20141021

MySQL 5.6 Reference Manualを確認してみるhttp://dev.mysql.com/doc/refman/5.6/en/sql-mode.html#sql-mode-setting

Page 7: MySQL Casual Fukuoka vol.4 20141021

ONLY_FULL_GROUP_BYといえば !

SQLアンチパターンの アンビギュアスグループ (曖昧なグループ)

Page 8: MySQL Casual Fukuoka vol.4 20141021

MySQLやSQLiteでは、 こういうテーブルに対して

Page 9: MySQL Casual Fukuoka vol.4 20141021

こういうSQLがエラーにならずに 結果を返すアレです

※sql_modeにONLY_FULL_GROUP_BYをセットすれば このようなSQLをエラーにする事ができます

Page 10: MySQL Casual Fukuoka vol.4 20141021

実際に確認してみます

CentOS 6.5 x86_64 MySQL公式yumリポジトリを使用

!

MySQL 5.6.21 MySQL 5.7.5

Page 11: MySQL Casual Fukuoka vol.4 20141021

デフォルトのmy.cnfには 以下の値が設定されていたので、まずコメントアウトします

※公式rpmでインストールすると、5.6ではmy.cnfが2つ存在するので注意 (5.7.5では/etc/my.cnfのみでした)

/usr/my.cnf /etc/my.cnf

!参考ページ

MySQL5.6が勝手にsql_modeを書き換えてくれる話 http://yoku0825.blogspot.jp/2013/03/mysql56sqlmode.html

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

Page 12: MySQL Casual Fukuoka vol.4 20141021

MySQL 5.6のsql_modeデフォルト値

MySQL 5.7のsql_modeデフォルト値

Page 13: MySQL Casual Fukuoka vol.4 20141021

5.7のsql_modeデフォルト値で 曖昧なSQLがエラーになる事を確認

Page 14: MySQL Casual Fukuoka vol.4 20141021

該当箇所のソースを確認してみる

http://bazaar.launchpad.net/~mysql/mysql-server/5.6/view/head:/sql/sys_vars.cc#L28575.6

http://bazaar.launchpad.net/~mysql/mysql-server/5.7/view/head:/sql/sys_vars.cc#L32235.7

Page 15: MySQL Casual Fukuoka vol.4 20141021

5.7系で変更が入ったリビジョン

http://bazaar.launchpad.net/~mysql/mysql-server/5.7/revision/8655/sql/sys_vars.cc#sql/sys_vars.ccrev 8655 (2014-08-24)

http://dev.mysql.com/worklog/task/?id=2489Worklog

Page 16: MySQL Casual Fukuoka vol.4 20141021

MySQL5.7にバージョンアップ する際には注意しましょう!

Page 17: MySQL Casual Fukuoka vol.4 20141021

おしまい