mysql
ORMのエラーはアプリのバグとは限らない なぜ突然起きるのか よく出るエラー1:GROUP BY よく出るエラー2:日付 よく出るエラー3:文字列長 なぜORMで特に起きるのか 実際に起きる誤診 応急処置として行われがちなこと 確認すべき項目 なぜ「突然」起きるの…
Dockerでは動くのに本番でMySQLが壊れる理由 なぜ同じMySQLなのに違うのか 最も多い違い:sql_mode 文字コードの違い タイムゾーンの違い ストレージエンジン設定 AUTO_INCREMENT挙動の違い なぜDockerでは再現しないのか よくある誤った対応 正しい確認方法…
開発では動くのに本番だけ落ちる ― SQLの問題に見えて環境の問題 sql_modeとは何か 典型例:日付カラム 典型例:文字列長 典型例:GROUP BY なぜ本番だけ違うのか もう一つの原因:文字コード なぜ再現しないのか 危険な対応 正しい対処手順 本質的な問題 ま…
GROUP BYの結果が変わった ― MySQLが壊れたわけではない 何が起きているのか 古いMySQLの実際の挙動 なぜ8系で変わったのか なぜ怖いのか 正しい書き方 最新の行を取りたい どれでもよい 集計したい ORMとGROUP BY 危険な回避策 なぜこの変更は重要なのか ま…
ORDER BYが遅くなるのはソートしているからではない filesortとは何か インデックスとORDER BYの関係 LIMITを付けたのに遅い理由 WHERE句とORDER BYの順序の罠 なぜバージョンアップで遅くなるのか よくある落とし穴 TEXTカラムで並び替え ASCとDESCの混在 S…
インデックスが急に効かなくなるのはSQLのせいではない 典型的な症状 なぜインデックスが使われないのか MySQL5.6と5.7以降の違い よくあるパターン:低選択性カラム もう一つの原因:統計情報のズレ なぜ本番だけ遅いのか LIKE検索で突然遅くなる例 インデ…
MySQLのutf8問題は「文字コードの知識不足」ではなく設計の歴史 MySQLのutf8は3バイトUTF-8 何が保存できないのか なぜこんな仕様になったのか スマートフォン時代と絵文字 utf8mb4の登場 なぜ何年も混乱が続いたのか インデックス長制限 よく起きる実害 安…
MySQLのONLY_FULL_GROUP_BYで突然アプリが落ちるのは「厳しくなった」からではない ONLY_FULL_GROUP_BYとは何か 何が問題になるのか なぜエラーになるのか(重要) 実際に起きていたこと なぜ本番だけ落ちるのか よくやる危険な対応 正しい修正方法 なぜこの…
MySQL8.0にしたらログインできない ― それはパスワードが間違っているわけではない 何が変わったのか ― caching_sha2_password mysql_native_password caching_sha2_password 実際に起きるエラー なぜこんな変更が入ったのか なぜDockerやローカルでは起きな…
「MariaDBはMySQL互換」は半分正しく半分間違い なぜMariaDBは生まれたのか 互換でなくなった理由 具体的に起きる違い インデックスとストレージエンジン JSON型の違い インデックスと照合順序 レプリケーションが壊れる理由 クライアントライブラリの違い …
MySQLのバージョン番号は「機能の差」ではなく「役割の差」を示している まず知っておきたい:3つの番号の意味 Innovation Releaseとは何か 開発のためのMySQL LTS(Long Term Support)とは何か 運用のためのMySQL なぜ2種類に分けたのか 開発者が求めるも…
MySQL8.0と8.4は“同じ系統”だが同じ性格ではない MySQL8.0の特徴:変化する前提のデータベース MySQL8.4の特徴:変わらないことが目的 “同じSQLが同じ結果を返す”の重要性 Innovation Release と LTSの違い Innovation Release(8.1〜8.3) LTS(8.4) 実務…
MySQL8.0の次が9.0でないのは“技術的理由”ではない メジャーバージョンが持つ“意味” MySQL8.0は“継続進化型”に変わった 従来のMySQLの考え方 そこで変わったリリースモデル 9.0にしなかった本当の理由 8.4という番号の意味 実際に起きる現場の反応 バージョ…
MySQL8.4がLTSになったのは「技術」ではなく「運用」のため MySQLのリリース方式が変わった背景 8.0までのMySQLは“止まらないリリース” 企業が嫌う“静かな仕様変更” OracleがLTSを導入した理由 Innovation Release と LTS Innovation Release LTS(8.4) な…
MySQLの「5.7」「8.0」「8.4」は“同じ製品”ではない MySQL5.7:古いが“従来のMySQL” 典型的なLAMP時代のMySQL 5.7の弱点:甘いSQLでも動いてしまう MySQL8.0:設計思想が変わった“新MySQL” 最大の変更:SQL標準に近づいた セキュリティも別物 追加された主な…
MySQLでREPLACEを使った置換 REPLACE関数 テーブルのデータに対する置換 REPLACE INTO文 REPLACEの注意点 まとめ MySQLでREPLACEを使った置換 MySQLでの置換は、REPLACE関数やREPLACE INTO文を使用することで可能です。 これらは、テキストデータやデータベ…
MySQLで正規表現の使い方 基本的なREGEXPの使い方 複数のパターンを使用する REGEXP_LIKE REGEXP_REPLACE REGEXP_INSTR REGEXP_SUBSTR 注意点 MySQLで正規表現の使い方 MySQLで正規表現を使うことで、テキスト検索をより柔軟に行うことが可能です。 特に複雑…
MySQLのPrimary key(主キー)について 1. 主キーの基本概念 2. 主キーの作成方法 3. 複合主キー 4. 自動インクリメントと主キー 5. 主キーの制約とパフォーマンス 6. 主キーの変更と削除 まとめ MySQLのPrimary key(主キー)について MySQLにおけるPrimary Key…
MySQLでORDER BYに指定するカラムが複数ある場合の書き方 複数のカラムでソートする例 昇順と降順の組み合わせ NULL値の扱い パフォーマンスの注意点 MySQLでORDER BYに指定するカラムが複数ある場合の書き方 MySQLでORDER BY句を使用して、複数のカラムを基…
MySQLでOPTIMIZE TABLEについて OPTIMIZE TABLEの使用方法 使用する場面 テーブルの種類とOPTIMIZE TABLE パフォーマンスへの影響 結果の確認 MySQLでOPTIMIZE TABLEについて MySQLでOPTIMIZE TABLEは、テーブルのパフォーマンスを改善するために使用される…
MySQLでON DUPLICATE KEY UPDATEというエラーが発生する場合 1. ユニークキーやプライマリキーの重複 対処方法 2. 不適切なインデックスの設定 対処方法 3. NULL値が原因のエラー 対処方法 まとめ MySQLでON DUPLICATE KEY UPDATEというエラーが発生する場合…
MySQLのCOALESCE MySQLのCOALESCE MySQLでは、Oracleで使用されるNVL関数に相当するものとしてCOALESCE関数が使用されます。 NVLは特定の列や式の値がNULLである場合に、別の値を返すために使われる関数ですが、MySQLにはNVL関数が存在しないため、COALESCE…
MySQLでNULLIFの書き方 NULLIFの基本構文 NULLIFの動作例 実際のデータベースでの使用例 NULLIFを使った応用例 NULLIFとCASE文の違い NULLIFの利点と注意点 結論 MySQLでNULLIFの書き方 MySQLでNULLIFは、2つの引数を比較し、それらが等しい場合にNULLを返し…
MySQLで現在日時の取得方法 NOW()関数 CURRENT_TIMESTAMP()関数 SYSDATE()関数 日付のみや時間のみを取得する方法 CURDATE()関数 CURTIME()関数 日付と時間のフォーマット タイムゾーンの設定 MySQLで現在日時の取得方法 MySQLで現在の日時を取得する方法は…
MySQLでMAX、MINの書き方 MAX関数 MIN関数 GROUP BY句との併用 複数の条件を使用する場合 HAVING句との併用 まとめ MySQLでMAX、MINの書き方 MySQLでMAXおよびMIN関数は、テーブル内のデータに対して最大値や最小値を取得するために使用します。 これらの関…
MySQLでLIMITの書き方 基本的なLIMITの書き方 LIMITのオフセット OFFSETの代わりにLIMITを使用 ORDER BYとの組み合わせ ページネーションでの使用 LIMITを使う際の注意点 まとめ MySQLでLIMITの書き方 MySQLでLIMIT句を使用すると、クエリ結果から取得する行…
MySQLでLIKEの書き方 基本的な構文 ワイルドカードの使用 大文字・小文字の区別 エスケープ文字 複数条件での使用 パフォーマンスへの影響 正規表現との違い まとめ MySQLでLIKEの書き方 MySQLでLIKEを使用することで、部分一致検索やパターンマッチを実現で…
MySQLで文字数を返す方法 LENGTH()関数 例1: 英字の文字列 例2: 日本語の文字列 CHAR_LENGTH()関数 例1: 英字の文字列 例2: 日本語の文字列 使用する場面の違い 文字数に関する他の関連関数 OCTET_LENGTH()関数 SUBSTRING()関数 実用例 まとめ MySQLで文字数…
MySQLでJSON型で返す方法 1. 基本的な使い方: JSON_OBJECT 関数 2. 複数行をJSON配列で返す: JSON_ARRAYAGG 関数 3. JSON型カラムの利用 4. JSONデータの更新 5. JSONデータの検索 6. JSON_UNQUOTEで文字列として扱う まとめ MySQLでJSON型で返す方法 MySQL…
MySQLで複数レコードを同時にINSERTする方法 パフォーマンスの向上 ON DUPLICATE KEY UPDATEとの併用 エラーハンドリング 結論 MySQLで複数レコードを同時にINSERTする方法 MySQLで複数のレコードを同時にINSERTする方法は、効率的に大量のデータをデータベ…