4

Ruby スクリプトに実装する前に、MySql テーブルのブール値を手動で更新してテストしようとすると、一致しますが変更はありません。

UPDATE calls SET ended = NOT ended WHERE incoming_Cid = '1234567890';

Query OK, 0 rows affected (0.00 sec)

Rows matched: 1 Changed: 0 Warnings: 0

私が間違っていない限り、これは正しい構文のように見えます。

ここのように、この問題(ブール値の反転)に関する他のスレッドを見ました。

これを達成するためのより良い方法は何でしょうか?

4

2 に答える 2

4

これはうまくいきますか:

UPDATE calls set ended = !ended WHERE incoming_Cid = '1234567890';
于 2013-08-08T18:27:24.913 に答える
3

ほとんどの場合、ended値は SQLNULL値でした。null値の論理notはまだnullであるため、値がended変更されていないため、DBは「変更なし」を適切に報告しています-最初はnullであり、まだnullでした:

mysql> create table foo (x boolean);
mysql> insert into foo values (null);
Query OK, 1 row affected (0.04 sec)

mysql> update foo set x=not x;
Query OK, 0 rows affected (0.00 sec)
Rows matched: 1  Changed: 0  Warnings: 0

mysql> update foo set x=not x;
Query OK, 0 rows affected (0.00 sec)
Rows matched: 1  Changed: 0  Warnings: 0

に注意してくださいChanged: 0。ただし、x を null 以外の値にリセットすると、次のようになります。

mysql> update foo set x=true;
Query OK, 1 row affected (0.06 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> update foo set x=not x;
Query OK, 1 row affected (0.04 sec)
Rows matched: 1  Changed: 1  Warnings: 0

行はすぐに変化し始めます。

于 2013-08-08T18:45:56.760 に答える