MySQLでブール型(BOOLEAN)フィールドを追加する方法を徹底解説
MySQLには厳密な意味での「ブール型」は存在せず、BOOLやBOOLEANとして定義した場合でも、内部的にはすべてTINYINT(1)として扱われます。つまり、tinyint(1)、bool、booleanの3つは完全なシノニム(同義語)です。
MySQLにおける真偽値の扱い
MySQLでは、0が偽(false)、0以外の数値が真(true)として解釈されます。PHPと同様に、0以外の任意の数値もtrueとして扱われる点に注意しましょう。実務上は、可読性を高めるためにtrue/falseリテラルを使うか、規約として0と1のみを使用するのが一般的です。
BOOL型カラムを持つテーブルを作成する
それでは、実際にbool型のカラムを持つテーブルを作成してみましょう。以下のクエリを実行します。
mysql> create table AddBoolDemo -> ( -> isToggle bool -> ); Query OK, 0 rows affected (1.24 sec)
DDLを確認して内部構造を見る
テーブルの定義(DDL)を確認するには、次のクエリを使用します。
SHOW CREATE TABLE yourTableName;
作成したテーブル「AddBoolDemo」に対して実行すると、boolが内部的にtinyint(1)へ変換されていることが確認できます。
mysql> show create table AddBoolDemo\G
実行結果は以下の通りです。
*************************** 1. row *************************** Table: AddBoolDemo Create Table: CREATE TABLE `addbooldemo` ( `isToggle` tinyint(1) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci 1 row in set (0.00 sec)
このように、boolで定義したにもかかわらず、DDL上ではtinyint(1)として保存されていることが分かります。
true / false / 1 / 0 のデータを挿入する
INSERTコマンドを使って、true、false、1、0の各リテラルを挿入してみます。
mysql> insert into AddBoolDemo values(true); Query OK, 1 row affected (0.19 sec) mysql> insert into AddBoolDemo values(false); Query OK, 1 row affected (0.19 sec) mysql> insert into AddBoolDemo values(1); Query OK, 1 row affected (0.10 sec) mysql> insert into AddBoolDemo values(0); Query OK, 1 row affected (0.18 sec)
挿入結果をSELECT文で確認する
SELECT文ですべてのレコードを表示し、格納された値を確認します。
mysql> select *from AddBoolDemo;
実行結果は以下の通りです。
+----------+ | isToggle | +----------+ | 1 | | 0 | | 1 | | 0 | +----------+ 4 rows in set (0.00 sec)
まとめ
MySQLでブール値を扱いたい場合は、boolまたはbooleanを指定すればよく、これらは自動的にtinyint(1)として処理されます。格納される値は結局のところ0と1であるため、アプリケーション側(PHPなど)では0をfalse、0以外をtrueとして扱うロジックを実装しておくと安心です。
-
MySQLでテーブルのタイムスタンプ(TIMESTAMP)フィールドを更新する方法
MySQLテーブルのタイムスタンプフィールドを更新する手順MySQLでは、UPDATE文とNOW()関数を組み合わせることで、TIMESTAMP型のフィールドを簡単に現在の日時へ更新できます。ここでは、具体的なサンプルを使って手順を解説します。1. テーブルを作成するまず、タイムスタンプ型のカラムを持つテーブルを作成しましょう。mysql> create table DemoTable -> ( -> PunchOut timestamp, -> PunchStatus tinyint(1) -> ); Query OK, 0 ro
-
MySQLの既存テーブルに現在の日付を追加・更新する方法
既存のテーブルを更新するには UPDATE 文を使用します。そして、現在の日付を設定するには CURDATE() 関数を使います。UPDATE テーブル名 SET カラム名 = CURDATE();サンプルテーブルの作成まずは動作確認用のテーブルを作成しましょう。mysql> create table DemoTable-> (-> DueDate datetime-> );Query OK, 0 rows affected (0.58 sec)データの挿入次に、INSERT コマンドを使ってテーブルにいくつかのレコードを挿入します。mysql> insert i