MySQLのONLY_FULL_GROUP_BYエラーを直す|集計単位・ANY_VALUE・最新行の選び方
MySQLの1055エラーを、同じ売上データで再現。GROUP BYへの列追加で集計単位が変わる理由と、ANY_VALUE・ROW_NUMBER・機能従属・sql_modeの使い分けを、実行結果から確認します。
AIとつくる、実践プログラミング・コーディングメディア
CATEGORY
データベースに関する基礎、実装例、トラブル解決の記事をまとめています。
MySQLの1055エラーを、同じ売上データで再現。GROUP BYへの列追加で集計単位が変わる理由と、ANY_VALUE・ROW_NUMBER・機能従属・sql_modeの使い分けを、実行結果から確認します。
utf8mb4_0900_ai_ciでダンプのインポートが止まるときの確認手順。移行先の対応を調べ、データを変えずにDDLを修正し、末尾空白による一意制約の衝突まで検証します。MariaDBの対応版での違いも紹介。
MySQL 8.4の10万行で、金額を先にする索引と日付を先にする索引を比較。EXPLAINのtype・key・rows・Extraと実測を読み、絞り込みとORDER BY LIMITのどちらを優先するか判断します。
ALTER TABLEがmetadata lock待ちになったときの確認SQLと解除判断を解説。MySQL 8.4でSleep接続がロックを保持し、後続SELECTも待つ状況を再現し、KILL QUERYと接続終了、lock_wait_timeoutの違いを確かめます。
MySQL 8.4でスロークエリログを一時的に有効化する手順。long_query_timeのGLOBALとSESSIONの違い、ログ各項目の読み方、mysqldumpslowの集計、元の設定へ戻す方法を実測例で解説します。
MySQLでSET GLOBALの値が再起動後に戻るとき、実行中の値・保存値・読み込み元をSQLで比較します。variables_info、SET PERSIST、PERSIST_ONLY、RESET PERSISTをMySQL 8.4の再起動実験で確認します。
MySQLのエラー1213を2つの接続で再現し、LATEST DETECTED DEADLOCKから更新順序の食い違いを読み解きます。順序を揃える修正と、PDOでトランザクション全体を再試行するPHPコードを実行結果つきで紹介します。
DBeaverで実行したSQLをQuery Managerで確認する方法と、MySQLのgeneral query logを有効にしてターミナル監視する方法を解説します。ログ保存先、FILE・TABLE出力、権限エラー、Docker、停止方法、slow query logとの違いまで整理します。
MySQL(InnoDB)のロックとデッドロックの仕組みと確認方法を紹介します。performance_schema.data_lock_waits・sys.innodb_lock_waitsでのロック待ちの確認、SHOW ENGINE INNODB STATUSでのデッドロック確認、エラー1205と1213の違いも整理します。
SQLステートメントとは、SQLで書いたデータベースへの命令1つ分のことで、クエリとも呼ばれます。SQLとは何か、DDLとDMLの違い、セミコロン・大文字小文字・コメントの記法、SQLクライアントまでMySQLを例に基礎知識をまとめます。
MySQLのシステム変数の意味と、SHOW VARIABLESでの確認、SET GLOBAL / SET SESSIONでの変更方法、再起動で戻る仕組みと権限エラーの対処を紹介します。セッション内で使えるユーザー定義変数も解説します。
MySQLでデータベースを作るときの実践的なテーブル構成を紹介します。トランザクションテーブルとマスタテーブルの命名、delete_flgによる論理削除、updated_at・updated_byの自動更新、外部キー制約を付けるかどうかの判断基準です。
データベース設計で使うER図とIE記法の書き方を紹介します。鳥の足(多)・○(0)・|(1)の意味と4つの組み合わせ、商品と在庫を例にした1対多の読み方、多対多を中間テーブルで表す方法まで説明します。
MySQLのCOLLATION(照合順序)の意味と、utf8mb4_general_ci・unicode_ci・binの違い、SHOW VARIABLESやSHOW FULL COLUMNSでの確認方法、ALTER TABLEでの変更方法を紹介します。
MySQL 8.4のDDLを初心者向けに解説します。CREATE DATABASE・CREATE TABLE、データ型、主キー・外部キー・CHECK、ALTER TABLE、DROP、定義確認、暗黙COMMIT、online DDLと本番変更時の注意まで確認できます。
バックエンドにおいて、データベース操作はかかせませんが、 データベースを学習する上で最初に知っておくと学習効率が上がる基礎知識を紹介します。
character set(文字コード)は、データベース、テーブル、カラムに設定可能です。 文字コードについて、特にutf8とutf8mb4について紹介します。
一般的にデータベースのユーザーと作成者は別になります。 扱える権限もそれぞれ変更したいことが多いです。 そのためにはユーザーを複数作成する必要があるので、ユーザーの確認と作成方法と権限の付与方法を紹介します。
TIMESTAMPとDATETIMEは、どちらも日時を扱うデータ型です。 TIMESTAMPとDATETIMEの違いを紹介します。
SQLにおいて、truncateとdeleteの違いを紹介します。 またtruncateの使用方法を紹介します。
テーブル設計は、後のプログラミングする上でも大きな影響を及ぼします。 いかにして、整合性のとれた、効率的なテーブル設計を行うか、基本的な設計手法である正規化とその手順を紹介します。