-
MySQLで真偽値を格納するならBOOLEANかTINYINTか?違いと使い方を解説
MySQLでは、BOOLEAN型とBOOL型はどちらもTINYINT(1)の別名(シノニム)として扱われます。つまり、BOOLEANやBOOLでカラムを定義しても、MySQLは内部的に自動的にTINYINT(1)へ変換します。格納できるのは実質的に0(偽)・1(真)およびNULLであり、3つの型に機能的な違いはありません。BOOLEAN型でテーブルを作成してみるまず、BOOLEAN型を使ったテーブルを作成します。テーブル作成のクエリは以下の通りです。mysql> create table BooleanDemo -> ( -> IsOn BOOLEAN -&
-
MySQLで現在のシステム変数(設定変数)を確認するSHOW VARIABLESコマンドの使い方
MySQLで現在の構成変数(システム変数)を確認したい場合は、SHOW VARIABLESコマンドを使用します。このコマンドを実行すると、サーバーに設定されているすべてのシステム変数とその値が一覧形式で表示されます。基本構文構文は以下の通りです。show variables;LIKE句で変数を絞り込むすべての変数を表示すると出力が非常に長くなるため、実務ではLIKE演算子と組み合わせて、必要な変数だけを抽出するのが便利です。構文は以下の通りです。show variables like %任意の文字列%;実行例たとえば、「max」を含む変数のみを取得したい場合は、次のようにクエリを実行します。m
-
MySQLのCASE式とは?仕組みと2つの構文を実例付きで解説
MySQLのCASE式は、プログラミング言語におけるswitch文と同じような働きをする条件分岐の仕組みです。SELECT文の中で値を評価し、条件に応じて異なる結果を返すことができます。CASE式には主に2つの書き方があります。それぞれの構文と実際の使用例を見ていきましょう。ケース1:比較条件(検索CASE)1つ目の構文は、任意の比較条件を記述できる形式です。複数のWHEN句を連ねることで、柔軟な条件分岐が可能になります。CASE WHEN 比較条件 THEN 値1 WHEN 比較条件 THEN 値2 ... ELSE デフォルト値 END AS 別名;実行例実
-
【MySQL入門】自動インクリメント(AUTO_INCREMENT)の主キーにデータを挿入する方法
MySQLでは、カラムに自動インクリメント(AUTO_INCREMENT)の主キーを設定すると、INSERT文でそのカラムに値を指定する必要がなくなるという大きなメリットがあります。つまり、Idカラムの値はMySQLが自動的に採番してくれるのです。本記事では、実際にテーブルを作成し、データを挿入しながら、自動インクリメント主キーの動作をわかりやすく解説します。1. テーブルの作成まず、自動インクリメントの主キーを持つテーブルを作成しましょう。テーブル作成のクエリは以下のとおりです。mysql> create table AutoIncrementedPrimary -> (
-
MySQLでCASE WHEN/THEN/ELSEを使って複数行を一括更新する方法
MySQLの一括更新におけるCASE WHEN/THEN/ELSE構文MySQLでは、CASE WHEN/THEN/ELSE式を活用することで、1つのUPDATE文で条件に応じた値へまとめて更新できます。大量のレコードを個別にUPDATE文を実行して処理する必要がなく、パフォーマンス面でも有利です。基本となる構文は以下の通りです。UPDATE yourTableName SET yourColumnName = CASE WHEN yourColumnName = 値1 THEN 更新後の値1 WHEN yourColumnName = 値2 THEN 更新後の値2 W
-
MySQLのUPDATEでdatetime=NOW()を使うと、更新されたすべての行は同じ日付・時刻になる?
MySQLでUPDATE文を実行する際にdatetime = NOW()と指定した場合、更新されたすべての行が同じ日付・時刻になるのかどうか、気になったことはありませんか?結論から言うと、使用する関数によって挙動が異なります。この記事では、NOW()とSYSDATE()の違いを実際の例を交えて詳しく解説します。NOW()とSYSDATE()の違いNOW()関数は、ステートメント(SQL文)が実行を開始した時点の時刻を定数として返します。つまり、1つのUPDATE文の中で何行更新しようとも、すべての行に同じ時刻が設定されます。一方、SYSDATE()関数は、その関数が実際に実行された瞬間の日時を
-
MySQLでテーブルのすべての行をループ処理する方法【ストアドプロシージャの実例付き】
MySQLでテーブルのすべての行をループ処理するには テーブル内のすべての行に対して繰り返し処理を行いたい場合は、ストアドプロシージャを使用するのが定番の方法です。本記事では、実際に動作するコード例を通じて、MySQLでテーブルの全行をループする手順をステップごとにわかりやすく解説します。 基本構文 テーブルの全行をループするためのストアドプロシージャは、以下のような構文で作成します。 delimiter // CREATE PROCEDURE yourProcedureName() BEGIN DECLARE anyVariableName1 INT DEFAULT 0; DECLARE a
-
MySQLで1つのセルのデータだけを変更・更新する方法【UPDATE文の使い方】
MySQLでテーブル内の特定の1つのセル(値)だけを変更したい場合は、UPDATEコマンドを使用します。WHERE句で対象の行を絞り込むことで、他のデータに影響を与えることなく、目的のセルのみを安全に更新できます。 UPDATE文の基本構文 UPDATE yourTableName SET yourColumnName = yourNewValue WHERE yourColumnName = yourOldValue; 構文の各要素は以下の通りです。 yourTableName:更新対象のテーブル名 yourColumnName:変更したいカラム名と、検索条件に使うカラム名 yourN
-
MySQLのSELECTで今日ログインしたユーザーを取得する方法
MySQLで今日ログインしたユーザーを抽出する方法今日ログインしたユーザーを取得したい場合は、STR_TO_DATE()関数とCURDATE()関数を組み合わせて使用します。ここでは、日付フィールドが文字列型として保存されている場合を想定して解説します。基本構文select yourColumnName1,yourColumnName2,yourColumnName3,...Nfrom youTableNameWHERE STR_TO_DATE(yourColumnName1, フォーマット) = CURDATE();ポイントは、STR_TO_DATE()で文字列型の日付を日付値に変換し、現在
-
MySQLでDD/MM/YYYY形式の日付をSELECTして降順に並べ替える方法
MySQLでは、SELECTとORDER BY ... DESCを組み合わせることで、DD/MM/YYYY形式で保存された日付文字列を正しく日付として解釈し、新しい順(降順)に並べ替えて取得できます。基本となる構文は以下の通りです。SELECT *FROM yourTableName where yourDatetimeColumnName order by STR_TO_DATE(yourDatetimeColumnName,%d/%m%Y) desc;ここでのポイントはSTR_TO_DATE()関数です。「日/月/年」形式の文字列をMySQLが認識できる日付値に変換してくれるため、単純な文
-
MySQLストアドプロシージャでFORループを実現する方法【LOOP文の使い方を解説】
MySQLのストアドプロシージャには、他のプログラミング言語のような「FOR LOOP」構文は標準では用意されていません。しかし、LOOP文とLEAVE、ITERATEを組み合わせることで、FORループと同じ動作を実現できます。基本構文以下は、MySQLストアドプロシージャでFORループのように動作させるための基本的な構文です。delimiter //CREATE procedure yourProcedureName()wholeblock:BEGIN DECLARE anyVariableName1 INT; DECLAR
-
MySQLに小数を格納する方法は?DECIMAL型の使い方を徹底解説
MySQLで小数(少数点以下の値を持つ数値)を正確に格納したい場合は、DECIMAL型を使用します。金額などの誤差が許されないデータを扱う際には、FLOAT型やDOUBLE型ではなく、DECIMAL型を選ぶのが基本です。 DECIMAL型の基本的な書式 DECIMAL型を定義する際には、次の2つのパラメータを指定します。 DECIMAL(全体の桁数, 小数点以下の桁数); 具体例: DECIMAL(4,2) の場合、「全体で4桁、そのうち小数点以下が2桁」という意味になります。つまり、整数部分は最大2桁、小数部分は最大2桁まで格納できます。 ケース1: 12.34 → 有効(そのまま格納され
-
MySQLで過去1時間以内に追加された行を取得する方法
MySQLでは、DATE_SUB()関数とNOW()関数を組み合わせることで、過去1時間以内に追加された行を簡単に抽出できます。この記事では、基本構文から実際のテーブルを使った実行例まで、手順を追って詳しく解説します。 基本構文 過去1時間以内のレコードを取得するには、次のようなクエリを使用します。 = date_sub(now(),interval 1 hour); NOW()は現在の日時を返し、DATE_SUB()は基準となる日時から指定した間隔を差し引いた値を返します。つまり date_sub(now(),interval 1 hour) は「現在時刻のちょうど1時間前」を意味します。日
-
MySQLのTINYINT(1)は127までの値を保持できる?表示幅と格納範囲の違いを解説
MySQLでブール値の代わりによく使われる「TINYINT(1)」。しかし、この「(1)」という数字は格納できる値の範囲を制限するものではありません。本記事では、TINYINT型の仕組みと、TINYINT(1)でも127や-128といった値が保持できる理由を、実際のSQL実行例とともにわかりやすく解説します。 TINYINT型の基本仕様 まず、MySQLにおけるTINYINT型のポイントを整理しましょう。 データサイズ: TINYINT型は1バイト(8ビット)で構成されます。 表示幅: TINYINT(N) の「N」は、あくまで表示幅(桁数の見た目)を指定するものであり、格納できる値の範囲
-
MySQLで特定の長さの文字列フィールドを検索する方法|char_length()とlength()の使い分け
MySQLで特定の長さを持つ文字列フィールドを検索するには、char_length()関数またはlength()関数を使用します。この記事では、それぞれの関数の違いと具体的な使い方を実例とともにわかりやすく解説します。 構文 ケース1:char_length()を使う場合 char_length()は、文字列の長さを文字数で評価したい場合に使用します。 select *from yourTableName where char_length(yourColumnName)=anySpecificLengthValue; ケース2:length()を使う場合 length()は、文字列の長さをバ
-
MySQLで関連度順に並べ替える方法は?
MySQLで検索結果を関連度の高い順に並べ替えるには、CASE文をORDER BY句と組み合わせて使用します。この記事では、実際にテーブルを作成しながら、その仕組みをわかりやすく解説します。サンプルテーブルの作成まず、動作を確認するためのテーブルを作成します。テーブル作成のクエリは以下の通りです。mysql> create table OrderByRelevance -> ( -> UserId int, -> UserName varchar(200) -> );Query OK, 0 rows affected (0.51 sec)テ
-
MySQLで2つの日時の時間差を取得・計算する方法
MySQLでは、TIMESTAMPDIFF()関数を使うことで、2つの日時の差を簡単に求めることができます。さらにABS()関数と組み合わせることで、開始日時と終了日時のどちらが先であっても、常に正の値(絶対値)として時間差を取得できます。 TIMESTAMPDIFF()関数の基本構文 時間差を取得するための基本的な構文は以下の通りです。 SELECT ABS(TIMESTAMPDIFF(HOUR, yourColumnName1, yourColumnName2)) as anyVariableName FROM yourTableName; TIMESTAMPDIFF(HOUR,
-
MySQLで文字列内の最後の部分文字列の位置(インデックス)を取得する方法
MySQLで文字列の中から最後の部分文字列の位置(インデックス)を取得するには、CHAR_LENGTH()関数とLOCATE()関数、そしてREVERSE()関数を組み合わせます。基本的な考え方はシンプルです。まず文字列全体の長さを求め、そこから最後の区切り文字までの長さを差し引きます。この「長さの差」が、最後の部分文字列の開始位置(インデックス)になります。構文具体的な構文は以下の通りです。SELECT CHAR_LENGTH(対象カラム名) - LOCATE(区切り文字, REVERSE(対象カラム名)) + 1 AS 任意の別名 FROM テーブル名;ここでのポイントは、REVERSE(
-
MySQLのBIGINT(8)は格納できる最大の整数という意味?「8」の本当の意味を解説
結論から言うと、BIGINT(8) の「8」はMySQLが格納できる整数の最大値を表すものではありません。この数字は「表示幅(display width)」の指定であり、データの保存サイズには一切影響しません。 BIGINTの保存サイズと扱える値の範囲 BIGINT型は常に8バイト(64ビット)の固定サイズで格納されます。そのため、括弧内の数値が何であっても、実際に保存できる値の範囲は変わりません。 符号付き(SIGNED):-9223372036854775808 ~ 9223372036854775807 符号なし(UNSIGNED):0 ~ 18446744073709551615
-
MySQLでINT型をDATETIME型に変換する方法
MySQLでは、組み込み関数 FROM_UNIXTIME() を使用することで、INT型(Unixタイムスタンプ)をDATETIME型に簡単に変換できます。Unixタイムスタンプは「1970年1月1日00:00:00 UTC」からの経過秒数を表す数値であり、これを人間が読める日付形式に変換する際に非常に便利です。基本構文変換の基本構文は以下の通りです。SELECT FROM_UNIXTIME(カラム名, %Y-%m-%d) AS 任意の別名 FROM テーブル名;第2引数のフォーマット指定子(%Y-%m-%d など)は省略可能で、省略した場合は「YYYY-MM-DD HH:MM:SS」形式で日