MySQL中是否有一种方法可以通过单个查询来反转布尔字段?

是的,您可以使用if()MySQL中的函数来反转布尔字段。语法如下-

UPDATE yourTableName SET yourBooleanColumnName = IF(yourBooleanColumnName,0,1);

为了理解上述语法,让我们创建一个表。创建表的查询如下-

mysql> create table ReverseBooleanField
   -> (
   -> Id int NOT NULL AUTO_INCREMENT,
   -> isValid BOOLEAN
   -> ,
   -> PRIMARY KEY(Id)
   -> );

现在,您可以使用insert命令在表中插入一些记录。查询如下-

mysql> insert into ReverseBooleanField(isValid) values(true);

mysql> insert into ReverseBooleanField(isValid) values(false);

mysql> insert into ReverseBooleanField(isValid) values(true);

mysql> insert into ReverseBooleanField(isValid) values(true);

mysql> insert into ReverseBooleanField(isValid) values(false);

使用select语句显示表中的所有记录。查询如下-

mysql> select *from ReverseBooleanField;

以下是输出-

+----+---------+
| Id | isValid |
+----+---------+
|  1 |       1 |
|  2 |       0 |
|  3 |       1 |
|  4 |       1 |
|  5 |       0 |
+----+---------+
5 rows in set (0.00 sec)

MySQL内部将BOOLEAN转换为TINYINT(1),将true设置为1,将false设置为0。

现在,让我们在单个查询中反转布尔字段-

mysql> update ReverseBooleanField set isValid = if(isValid,0,1);
Rows matched − 5 Changed − 5 Warnings − 0

使用select语句检查布尔字段是否反转。查询如下-

mysql> select *from ReverseBooleanField;

以下是输出-

+----+---------+
| Id | isValid |
+----+---------+
| 1  |       0 |
| 2  |       1 |
| 3  |       0 | 
| 4  |       0 |
| 5  |       1 |
+----+---------+
5 rows in set (0.00 sec)