【MySQL】ブール値(BOOLEAN)をUPDATE文で更新する方法を実例付きで解説
MySQLでは、UPDATEコマンドを使ってブール値を簡単に更新できます。BOOLEANデータ型を定義しても、MySQLは内部的にtinyint(1)へ変換して扱う点に注意が必要です。また、trueやfalseといったリテラルも使用でき、trueは「1」、falseは「0」としてtinyint(1)に格納されます。
ブール値を更新する基本構文
ブール値の更新には、通常のUPDATE文と同じ構文を使用します。
UPDATE yourTableName SET yourColumnName = yourValue WHERE yourCondition;
サンプルテーブルの作成
それでは、実際にテーブルを作成して動作を確認してみましょう。以下のクエリで「UpdateBooleans」テーブルを作成します。
mysql> create table UpdateBooleans -> ( -> Id int NOT NULL AUTO_INCREMENT, -> isSuccessful BOOLEAN, -> PRIMARY KEY(Id) -> ); Query OK, 0 rows affected (1.55 sec)
このテーブルには、AUTO_INCREMENTで自動採番されるIdカラムと、BOOLEAN型のisSuccessfulカラムが含まれています。
テストデータの挿入
次に、INSERTコマンドでtrueとfalseを交互にレコードとして登録していきます。
mysql> insert into UpdateBooleans(isSuccessful) values(true); Query OK, 1 row affected (0.17 sec) mysql> insert into UpdateBooleans(isSuccessful) values(false); Query OK, 1 row affected (0.21 sec) mysql> insert into UpdateBooleans(isSuccessful) values(true); Query OK, 1 row affected (0.13 sec) mysql> insert into UpdateBooleans(isSuccessful) values(false); Query OK, 1 row affected (0.15 sec) mysql> insert into UpdateBooleans(isSuccessful) values(false); Query OK, 1 row affected (0.24 sec) mysql> insert into UpdateBooleans(isSuccessful) values(false); Query OK, 1 row affected (0.17 sec) mysql> insert into UpdateBooleans(isSuccessful) values(true); Query OK, 1 row affected (0.12 sec)
登録内容の確認
SELECT文ですべてのレコードを表示してみましょう。
mysql> select *from UpdateBooleans;
実行結果は以下の通りです。trueが「1」、falseが「0」で表示されていることが分かります。
+----+--------------+ | Id | isSuccessful | +----+--------------+ | 1 | 1 | | 2 | 0 | | 3 | 1 | | 4 | 0 | | 5 | 0 | | 6 | 0 | | 7 | 1 | +----+--------------+ 7 rows in set (0.00 sec)
ブール値を一括更新する
ここからが本題です。以下のクエリでは、「false(0)になっているレコードをすべてtrue(1)へ更新」しています。
mysql> update UpdateBooleans set isSuccessful = true where isSuccessful = false; Query OK, 4 rows affected (0.15 sec) Rows matched: 4 Changed: 4 Warnings: 0
4件のレコードが条件に一致し、すべて更新されたことが分かります。再度SELECT文で確認してみましょう。
mysql> select *from UpdateBooleans;
実行結果:
+----+--------------+ | Id | isSuccessful | +----+--------------+ | 1 | 1 | | 2 | 1 | | 3 | 1 | | 4 | 1 | | 5 | 1 | | 6 | 1 | | 7 | 1 | +----+--------------+ 7 rows in set (0.00 sec)
すべてのレコードのisSuccessfulが「1」に更新されました。
応用:NOT演算子で値を反転させる
なお、現在の値を単純に反転させたい場合は、NOT演算子を使うと便利です。
UPDATE UpdateBooleans SET isSuccessful = NOT isSuccessful;
このように記述すると、true(1)のレコードはfalse(0)へ、false(0)のレコードはtrue(1)へ一括で切り替えられます。
まとめ
- MySQLのBOOLEAN型は内部的にtinyint(1)として扱われる
- true/falseリテラルはそれぞれ1/0に対応する
- UPDATE文+WHERE句を組み合わせれば、条件に合致する行だけを効率的に更新できる
- NOT演算子を使えば既存のブール値を簡単に反転できる
-
MySQLで既存の値に+1を加算する方法|UPDATE文の基本と実例
MySQLでは、UPDATE文を使うことで、テーブル内の既存の数値に簡単に+1を加算できます。この記事では、実際にテーブルを作成し、データを挿入してから、既存の値に1を足す手順を具体例とともに解説します。サンプルテーブルの作成まずは動作確認用に、int型のカラムを持つシンプルなテーブルを作成しましょう。mysql> create table Add1ToExistingValue -> ( -> Value int -> ); Query OK, 0 rows affected (0.56 sec)テストデータの挿入次に、INSERTコマンドを使
-
MySQLの単一クエリでIDが最も高い行を更新する方法
はい、単一のクエリで実行可能です。まずはサンプル用のテーブルを作成しましょう。mysql> create table DemoTable ( ID int, GameScore int ); Query OK, 0 rows affected (0.55 sec)次に、INSERTコマンドを使用してテーブルにレコードをいくつか挿入します。mysql> insert into DemoTable