-
MySQLでVARCHARフィールド内の文字列出現回数をカウントする方法
MySQLでVARCHARフィールド内の文字列出現回数をカウントする方法 VARCHAR型のフィールド内に特定の文字列が何回出現しているかをカウントしたい場合、「元の文字列の長さ」から「対象文字列を削除した後の長さ」を引き、その差を「対象文字列の長さ」で割るというシンプルなロジックを活用できます。 まず、CREATE文を使ってサンプル用のテーブルを作成しましょう。 mysql> create table StringOccurrenceDemo -> ( -> Cases varchar(100), -> StringValue varchar(50
-
MySQLデータベース内の全テーブルのレコード数を取得する方法
MySQLデータベースに存在するすべてのテーブルのレコード総数を取得したい場合は、INFORMATION_SCHEMA.TABLESビューのTABLE_ROWSカラムを集計関数SUMと組み合わせて使用します。この方法なら、テーブルを1つずつ確認しなくても、データベース全体のレコード数をひとつのクエリで把握できます。データベース全体の合計レコード数を取得する基本となる構文は以下の通りです。 SELECT SUM(TABLE_ROWS) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = yourDatabaseName; yourD
-
MySQLのWHERE句とHAVING句の違いとは?集計関数での使い分けを実例付きで解説
MySQLにおけるWHERE句とHAVING句の基本的な役割 MySQLでは、検索結果を絞り込むためにWHERE句という条件句を使用できます。WHERE句を使うことで、テーブルから必要なレコードだけを選択するための抽出条件(選択基準)を指定することが可能です。 一方、HAVING句は、グループ化された行や集計結果に対してフィルタ条件を指定するために使われます。 WHERE句とHAVING句の最大の違い 両者の重要な違いは次の通りです。 WHERE句:集計関数(SUM、AVG、COUNTなど)と組み合わせて使用できない HAVING句:集計関数と組み合わせて使用できる それでは、実際にサンプ
-
MySQLのSHA256ハッシュの長さは?保存に適したデータ型も解説
SHA256ハッシュの長さについて その名前のとおり、「SHA256」が生成するハッシュ値は256ビット長です。ここで重要なのは、これをどのように文字列として保存するかという点です。 一般的に、ハッシュ値は16進数表記で扱われます。16進数では1文字(1桁)あたり4ビットを表現できるため、256ビットを16進数で表すには以下の計算が必要になります。 256 ÷ 4 = 64文字 つまり、SHA256ハッシュを保存するカラムには、varchar(64) または char(64) を指定すれば十分です。固定長の char(64) を使えば、わずかに効率面でのメリットが期待できます。 サンプルテー
-
MySQLのデータベース・テーブル・カラムの文字セットを確認する方法
MySQLでは、データベース、テーブル、カラムそれぞれに個別の文字セット(キャラクタセット)が設定されます。文字化けやデータ整合性のトラブルを防ぐためにも、実際にどの文字セットが使われているのかを確認できることは非常に重要です。本記事では、information_schemaを活用して文字セットを調べる方法を、具体例とともにわかりやすく解説します。検証環境についてここでは、例として「business」という名前のデータベース、およびその中に既に存在する「student」というテーブルを使用します。テーブルの文字セットを確認するテーブルの文字セットを確認するには、information_sche
-
MySQLのibdata1ファイルを縮小・パージする方法
MySQLを運用していると、システムテーブルスペースである「ibdata1」ファイルが際限なく肥大化し、ディスク容量を圧迫するという問題に直面することがあります。残念ながら、ibdata1ファイルは一度大きくなるとそのままでは縮小できません。これはMySQLの特に厄介な仕様の一つとして知られています。 ibdata1ファイルが縮小できない理由 ibdata1には、InnoDBのデータディクショナリ、Undoログ、変更バッファなどの重要な情報が格納されています。MySQLはこのファイルに対してデータ領域を再利用するものの、OSへディスク領域を返却することはないため、削除されたレコードがあってもフ
-
CREATE TABLE文を個別に実行せず、SELECTステートメントだけでMySQLの一時テーブルを作成する方法
SELECTステートメントから一時テーブルを作成するにはSELECTステートメントを使って一時テーブル(Temporary Table)を作成するには、TEMPORARYキーワードを使用します。これにより、別途CREATE TABLE文を実行することなく、既存テーブルのデータをそのままコピーした一時テーブルを簡単に生成できます。この一時テーブルには次のような特徴があります。作成されたセッション内でのみ参照可能セッションが閉じられると自動的に破棄される異なる2つのセッションが同じ名前の一時テーブルをそれぞれ持つことができる準備:元となるテーブルを作成するまず、サンプル用の通常テーブルを作成します
-
MySQLで現在時刻に2時間を追加する方法を解説
MySQLの現在時刻に2時間を追加する方法 MySQLでは、now()関数を使って現在の日時を取得できます。さらに、DATE_ADD()関数とINTERVAL句を組み合わせることで、現在時刻に任意の時間(この例では2時間)を簡単に加算することが可能です。 まずは、システムの現在日時をnow()関数で確認してみましょう。 1. 現在の日時を取得する 以下のクエリを実行すると、現在の日付と時刻を取得できます。 mysql> select now(); 実行結果は次の通りです。 +---------------------+ | now() | +------
-
MySQLのレコードから数字を抽出する方法:CONVERT関数の実践的な使い方
MySQLでレコードから数字を抽出する方法 「John-11」のような文字列が保存されたカラムから、数字の部分だけを取り出したいケースはよくあります。そんなときは CONVERT() 関数や正規表現を活用しましょう。CONVERT() は値をあるデータ型から別のデータ型へ変換するための関数で、これを利用することで文字列中の数字部分を数値として取得できます。 本記事では、テーブルの作成から数字の抽出・並べ替えまでを、実際のSQL例とともに順を追って解説します。 ステップ1:テーブルを作成する まずはサンプル用のテーブルを作成します。 mysql> create table textInt
-
MySQLで2つの列の値を交換する方法【UPDATE文とスワップロジック】
MySQLで2つの列の値を交換する方法MySQLでテーブル内の2つの列(カラム)の値を入れ替えたい場合、一時的な作業用の列を作らなくても、簡単な算術演算を利用した「スワップ(交換)ロジック」で実現できます。値の交換(スワップ)ロジックの基本2つの値を交換するには、以下の手順に従います。両方の値を合計し、1つ目の列に格納する2つ目の列から1つ目の列の値を引き、その結果を2つ目の列に格納する更新後の2つ目の列の値を1つ目の列から引き、その結果を1つ目の列に格納するこのルールを式で表すと次のようになります。1つ目の列を「a」、2つ目の列を「b」とします。1. a = a + b; 2. b = a
-
MySQLで値が整数かどうかを判定する方法(CAST関数とREGEXPの使い方)
MySQLで特定の値が整数であるかどうかを確認したい場面は少なくありません。最も手軽な方法のひとつが、CAST()関数を使うやり方です。値が数値として解釈できない場合は「0」が返され、数値として有効な場合はその値自体が返されます。この仕組みを利用することで、値が整数かどうかを簡単に判別できます。ケース1:文字列が混ざった値をチェックするまずは、英字と数字が混在した文字列をCAST()関数でUNSIGNED型に変換してみましょう。mysql> select cast(John123456 AS UNSIGNED);実行結果は以下の通りです。「John」という文字列が含まれているため数値とし
-
MySQLでテーブルのスキーマを表示・確認する方法|DESCRIBEとSHOW CREATE TABLEの使い方
MySQLでテーブルのスキーマ(構造)を確認するには、DESCRIBE(DESC)コマンドを使うのが最も手軽な方法です。このコマンドを実行すると、カラム名、データ型、NULLの許可、キーの有無、デフォルト値といったテーブル構造の情報を一覧形式で取得できます。 DESCRIBEコマンドの基本構文 DESCRIBE データベース名.テーブル名; DESCRIBEの実行例 それでは、実際に上記の構文を使ってみましょう。ここでは「business」データベース内の「student」テーブルを対象とします。 mysql> DESCRIBE business.student; 実行すると、次のような
-
MySQLでInnoDBストレージエンジンを使用しているすべてのテーブルを確認する方法
InnoDBエンジンのテーブル一覧を取得するSQLMySQLでInnoDBストレージエンジンを使用しているすべてのテーブル名を確認するには、information_schema.TABLES を参照します。このシステムビューには、データベース(スキーマ)名、テーブル名、使用中のストレージエンジンなどのメタデータが格納されており、ENGINE列の値で絞り込むことで目的のテーブルだけを抽出できます。以下のクエリでは、ENGINEが「InnoDB」であるテーブルを取得し、さらに NOT IN 条件を使って mysql・information_schema・performance_schema といっ
-
PythonでMySQLデータベースへの挿入後にIDを取得する方法
はじめに PythonからMySQLデータベースへレコードを挿入する際、「今挿入したばかりのレコードのID(AUTO_INCREMENTで自動採番された値)をすぐに取得したい」というケースは非常によくあります。本記事では、pymysqlライブラリを使ってMySQLにデータを挿入し、その直後にIDを取得する具体的な手順を解説します。 前提条件 作業を始める前に、以下の環境が整っていることを確認してください。 MySQL 8.0.12 がインストールされていること Python 3.6.3(32ビット) がインストールされていること pipコマンドで pymysql がインストールされているこ
-
mysql_fetch_array と mysql_fetch_assoc と mysql_fetch_object の違いを徹底解説
mysql_* 系の関数はすでに非推奨(deprecated)となっており、現在ではより高いセキュリティと機能性を備えた代替手段が用意されています。新規の開発では、mysqli 拡張モジュールや PDO の使用が強く推奨されます。 注意: どうしても旧関数を使用する場合でも、_assoc か _row を選ぶようにしましょう。 mysql_fetch_assoc とは この関数は、取得した行に対応する連想配列(文字列キーの配列)を返します。これ以上行が存在しない場合は FALSE を返します。連想配列ではデータを「キー」と「値」のペアとして扱うことができ、キーにはカラム名、値にはその行の該当カ
-
MySQLエラー1452の原因と解決方法|外部キー制約で子行を追加・更新できないときの対処法
MySQLエラー1452とは?MySQLでテーブル間に外部キー制約(FOREIGN KEY)を設定した後、子テーブルにレコードを挿入または更新しようとすると、次のようなエラーが発生することがあります。ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint failsこの記事では、エラー1452が発生する仕組みを具体例とともに解説し、発生原因と対処方法をわかりやすく説明します。エラーが発生する状況を再現してみるまず、実際にエラーが起こるケースをサンプルコードで確認しましょう。1. 子テーブルを作
-
MySQLのSELECTステートメントでテーブル名を一覧取得する方法
MySQLでSELECTステートメントを使ってデータベース内のテーブル名を取得するには、information_schema.tables を利用します。information_schemaは、MySQLサーバーが管理するメタデータ(テーブル名、カラム情報など)を格納している特殊なデータベースです。 テーブル名を取得する基本構文 以下の構文を使うことで、指定したデータベースに含まれるすべてのテーブル名をSELECT文で一覧表示できます。 SELECT Table_name as TablesName from information_schema.tables where table_sch
-
MySQLで列の値の先頭に文字列を追加(連結)する方法
MySQLでは、列の値の先頭に文字列を追加したい場合、CONCAT関数を使用します。CONCAT関数はUPDATE文と組み合わせることで、既存のデータを一括して更新できます。 CONCAT関数とは CONCAT関数は、複数の文字列を連結するための関数です。「CONCAT(文字列1, 文字列2, ...)」のように引数を指定すると、それらを順番に結合した結果を返します。この特性を利用することで、列の値の前や後ろに任意の文字列を付加できます。 サンプルテーブルの作成 まず、動作確認用のテーブルを作成します。 mysql> create table PrependStringOnCOlumn
-
MySQLでLOAD DATA LOCAL INFILEを有効にする方法【SET GLOBALコマンドの使い方を解説】
MySQLでLOAD DATA LOCAL INFILE機能を有効にするには、SETコマンドにGLOBALキーワードを組み合わせて使用します。初期状態では、local_infileは無効(OFF)に設定されています。現在のlocal_infileの設定を確認するまず、以下の構文で現在の設定値を確認できます。mysql> SHOW GLOBAL VARIABLES LIKE local_infile;実行結果は以下のとおりです。+---------------+-------+| Variable_name | Value |+---------------+-------+| local
-
MySQLのWHERE句で配列を渡す方法|IN句を使った複数条件の指定テクニック
MySQLのWHERE句で配列を渡すには? MySQLでは、WHERE句とIN句を組み合わせることで、配列のように複数の値をまとめて条件に指定できます。特定の複数のIDや値に一致するレコードだけを抽出したい場合に非常に便利な方法です。 この記事では、実際にサンプルテーブルを作成しながら、IN句を使った配列渡しの方法を具体的なSQL例とともに解説します。 1. サンプルテーブルの作成 まず、例として使用する新しいテーブルを作成します。 mysql> create table PassingAnArrayDemo -> ( -> id int, -&g