Computer >> Máy Tính >  >> Lập trình >> MySQL

Có cách nào trong MySQL để đảo ngược trường boolean với một truy vấn duy nhất không?

Có, bạn có thể sử dụng hàm if () từ MySQL để đảo ngược trường boolean. Cú pháp như sau -

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

Để hiểu cú pháp trên, chúng ta hãy tạo một bảng. Truy vấn để tạo bảng như sau -

mysql> create table ReverseBooleanField
   -> (
   -> Id int NOT NULL AUTO_INCREMENT,
   -> isValid BOOLEAN
   -> ,
   -> PRIMARY KEY(Id)
   -> );
Query OK, 0 rows affected (0.56 sec)

Bây giờ bạn có thể chèn một số bản ghi trong bảng bằng cách sử dụng lệnh insert. Truy vấn như sau -

mysql> insert into ReverseBooleanField(isValid) values(true);
Query OK, 1 row affected (0.18 sec)

mysql> insert into ReverseBooleanField(isValid) values(false);
Query OK, 1 row affected (0.14 sec)

mysql> insert into ReverseBooleanField(isValid) values(true);
Query OK, 1 row affected (0.29 sec)

mysql> insert into ReverseBooleanField(isValid) values(true);
Query OK, 1 row affected (0.09 sec)

mysql> insert into ReverseBooleanField(isValid) values(false);
Query OK, 1 row affected (0.14 sec)

Hiển thị tất cả các bản ghi từ bảng bằng cách sử dụng một câu lệnh chọn. Truy vấn như sau -

mysql> select *from ReverseBooleanField;

Sau đây là kết quả -

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

MySQL chuyển đổi nội bộ BOOLEAN thành TINYINT (1), giá trị true là 1 và false là 0.

Bây giờ, chúng ta hãy đảo ngược trường boolean trong một truy vấn duy nhất -

mysql> update ReverseBooleanField set isValid = if(isValid,0,1);
Query OK, 5 rows affected (0.21 sec)
Rows matched − 5 Changed − 5 Warnings − 0

Kiểm tra xem trường boolean có được đảo ngược hay không bằng cách sử dụng câu lệnh select. Truy vấn như sau -

mysql> select *from ReverseBooleanField;

Sau đây là kết quả -

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