MySQL Workbench で ONLY_FULL_GROUP_BY を無効にする方法

2024-04-02

MySQL の ONLY_FULL_GROUP_BY を無効にする方法

このモードは、データの整合性を保つために導入されました。しかし、場合によっては、このモードが原因でエラーが発生することがあります。

ONLY_FULL_GROUP_BY を無効にする方法はいくつかあります。

SET GLOBAL sql_mode オプションを使用する

SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

このコマンドは、ONLY_FULL_GROUP_BY を含むすべての SQL モードを無効にします。

SET SESSION sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

このコマンドは、現在のセッションのみで ONLY_FULL_GROUP_BY を無効にします。

my.cnf ファイルを設定する

[mysqld]
sql-mode=""

クエリに SQL_NO_ONLY_FULL_GROUP_BY オプションを使用する

SELECT *
FROM table
GROUP BY column
ORDER BY column
SQL_NO_ONLY_FULL_GROUP_BY;

注意事項

ONLY_FULL_GROUP_BY を無効にすることで、データの整合性が損なわれる可能性があります。無効にする前に、その影響をよく理解する必要があります。




テーブル schema

CREATE TABLE `users` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(255) NOT NULL,
  `age` INT NOT NULL,
  `gender` ENUM('male', 'female') NOT NULL,
  PRIMARY KEY (`id`)
);

データ

INSERT INTO `users` (`name`, `age`, `gender`) VALUES
  ('John Doe', 30, 'male'),
  ('Jane Doe', 25, 'female'),
  ('John Smith', 40, 'male'),
  ('Jane Smith', 35, 'female');

ONLY_FULL_GROUP_BY を有効にした場合

SELECT
  gender,
  COUNT(*) AS count
FROM users
GROUP BY gender;

このクエリは、エラーが発生します。

ERROR 1055 (HY000): Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'users.name' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

SELECT
  gender,
  COUNT(*) AS count
FROM users
GROUP BY gender;

このクエリは、以下の結果を出力します。

gender | count
------- | --------
male   | 2
female | 2

この例では、ONLY_FULL_GROUP_BY を無効にすることで、GROUP BY 句で指定されていない列 name を SELECT 句で使用できるようになりました。




ONLY_FULL_GROUP_BY を無効にする他の方法

SQLyog を使用する

SQLyog は、MySQL の GUI 管理ツールです。このツールを使用して、ONLY_FULL_GROUP_BY を無効にすることができます。

手順

  1. SQLyog を起動し、MySQL サーバーに接続します。
  2. 左側のツリービューで、データベースを選択します。
  3. 右側のペインで、"Server" タブを選択します。
  4. "SQL Mode" セクションで、"ONLY_FULL_GROUP_BY" オプションのチェックボックスをオフにします。
  5. "Apply" ボタンをクリックします。
  1. "Server Configuration" セクションで、"SQL Mode" オプションの "Edit" ボタンをクリックします。
  1. 以下のコマンドを実行します。
mysqldump --defaults-extra-file=/etc/my.cnf.d/my.cnf database_name > database.sql

my.cnf.d/my.cnf ファイルには、以下の内容を追加します。

[mysqld]
sql-mode=""

mysqld を再起動することで、ONLY_FULL_GROUP_BY 設定を更新することができます。

sudo service mysql restart

mysql


SQLite INSERT - ON DUPLICATE KEY UPDATE vs INSERT OR REPLACE vs MERGE

INSERT . .. ON DUPLICATE KEY UPDATE は、SQLite における INSERT ステートメントの拡張機能です。この機能を使うと、レコードが既に存在する場合、そのレコードを更新することができます。動作この機能は、以下の2つのステップで動作します。...


データベース結合の基本!INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL JOIN の違いを徹底解説

INNER JOIN (内部結合)条件に一致するレコードのみを結合します。両方のテーブルで一致するレコードが存在する場合のみ、結果に表示されます。例:この例では、users テーブルと orders テーブルを users. id と orders...


「Multiple Master Challenge | MySQL & MariaDB」プログラミング解説

MySQLとMariaDBは、オープンソースで高性能な関係データベース管理システム(RDBMS)として広く利用されています。可用性を高め、ダウンタイムを最小限に抑えるために、マルチマスター構成が検討されることがあります。しかし、マルチマスター構成は、マスタースレーブ構成と比べて複雑であり、特有の課題が存在します。...


各グループのカウントを取得し、各グループの結果行の N 行後にカウントを停止する方法(MySQL/MariaDB)

このチュートリアルでは、MySQL または MariaDB で以下の操作を行う方法を説明します。各グループのカウントを取得します。各グループの結果行の N 行後にカウントを停止します。この方法は、以下の状況で役立ちます。大規模なデータセットでグループごとの件数を制限したい場合。...


データベースのパフォーマンス向上とエラー回避の両立:MySQL/MariaDBにおける「ERROR 1071 (42000)」対策

このエラーは、MySQLまたはMariaDBデータベースにおいて、インデックスの長さが最大許容値を超えた場合に発生します。MySQL/MariaDBのデフォルトの最大インデックス長は3072バイトですが、ストレージエンジンや文字セットの設定によって異なる場合があります。...


SQL SQL SQL SQL Amazon で見る



データ量が多い場合でも効率的に削除!MySQLで重複行を削除する方法

MySQLで重複行を削除するには、主に以下の2つの方法があります。DELETE ステートメントDISTINCT キーワードそれぞれの方法について、詳細とサンプルコードを紹介します。DELETE ステートメントを使用すると、特定の条件に基づいて重複行を削除できます。


もう迷わない! DISTINCTとSELECTの組み合わせをマスターして、必要なデータを確実に取得しよう

そこで、この解説では、1つの列をDISTINCTで選択しつつ、対応する他の列も選択する方法について、いくつかのパターンに分けて詳しく説明します。GROUP BY句を用いることで、指定した列に基づいて結果をグループ化し、GROUP_CONCAT関数を使用して、各グループ内のDISTINCT値を連結することができます。


グループ化の達人!MySQLでグループごとの最大値レコードを取得する4つのテクニック

SQLのGROUP BY句を使用してグループ化された結果の各グループの最大値を持つレコードを取得するには、いくつかの方法があります。方法MAX()関数とGROUP BY句を使用するこれは最も基本的な方法です。MAX()関数はグループ内の最大値を返し、GROUP BY句はグループを指定します。


MySQL 5.7.5 以降で発生するエラー "only_full_group_by" の原因と解決方法

MySQL 5.7.5 以降では、only_full_group_by という新しい SQL モードがデフォルトで有効になっています。このモードは、GROUP BY 句で選択されていない列を関数で集計する場合に、エラーが発生するようになります。


MySQLでONLY_FULL_GROUP_BYを有効にする方法

ONLY_FULL_GROUP_BYを有効にする方法方法 1:MySQLコマンドライン方法 2:my. cnfファイル方法 3:MySQL WorkbenchMySQL Workbenchを起動し、接続したいデータベースを選択します。サーバ管理 > 設定 > SQLモードを選択します。