MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

【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演算子を使えば既存のブール値を簡単に反転できる
  1. MySQLで既存の値に+1を加算する方法|UPDATE文の基本と実例

    MySQLでは、UPDATE文を使うことで、テーブル内の既存の数値に簡単に+1を加算できます。この記事では、実際にテーブルを作成し、データを挿入してから、既存の値に1を足す手順を具体例とともに解説します。サンプルテーブルの作成まずは動作確認用に、int型のカラムを持つシンプルなテーブルを作成しましょう。mysql> create table Add1ToExistingValue -> ( -> Value int -> ); Query OK, 0 rows affected (0.56 sec)テストデータの挿入次に、INSERTコマンドを使

  2. MySQLの単一クエリでIDが最も高い行を更新する方法

    はい、単一のクエリで実行可能です。まずはサンプル用のテーブルを作成しましょう。mysql> create table DemoTable     (     ID int,     GameScore int     ); Query OK, 0 rows affected (0.55 sec)次に、INSERTコマンドを使用してテーブルにレコードをいくつか挿入します。mysql> insert into DemoTable