MYSQL在每次调用时切换枚举值

MYSQL在每次调用时切换枚举值,mysql,sql,Mysql,Sql,我希望这样 我有一个带有0和1的ENUM列,我想在每个查询中在这两个值之间切换 UPDATE settings SET state = 1 IF state = 0 ELSE IF state = 0 SET STATE = 1 WHERE id = '$id'; 我尝试了这个,但它使列空了 UPDATE settings SET state = IF(state=1, 0, 1) 谢谢。我不喜欢你的enum。尤其是当您

我希望这样

我有一个带有0和1的
ENUM
列,我想在每个查询中在这两个值之间切换

UPDATE settings
SET state = 1 IF state = 0 
              ELSE IF state = 0 
                   SET STATE = 1 WHERE id = '$id';
我尝试了这个,但它使列空了

UPDATE settings SET state = IF(state=1, 0, 1) 

谢谢。

我不喜欢你的
enum
。尤其是当您使用它来存储
0
1
时,它可能会令人困惑,甚至容易出错

使用tinyint,它更容易使用,更易读

mysql> create table switch(state tinyint default 0);

mysql> insert into switch values (0);

mysql> select * from switch;
+-------+
| state |
+-------+
|     0 |
+-------+

mysql> update switch set state = not state; /*simple as that :)*/

mysql> select * from switch;
+-------+
| state |
+-------+
|     1 |
+-------+

mysql> update switch set state = not state;

mysql> select * from switch;
+-------+
| state |
+-------+
|     0 |
+-------+

您还可以使用简单的if语句:

mysql > UPDATE switch SET state=if(state=0,1,0);

为什么不设置state=(1-state)其中。。。如果列最初为NULL,则必须将默认值设置为0或使用state=1-IFNULL(state,0)如果它最初不是NULL,则它最初为“0”。确定后,“state=1-state”将起作用。当1时,它将被设置为0,当0-设置为1时。@i486可能我的系统有问题,这与下面的答案类似。设置state='',然后设置为“0”,然后设置为“”;不是1。不管怎样,你能把这个作为答案并解释数学吗?把列定义为INT或TINYINT(或偶数位)。使用enum时,它看起来像string/varchar,即没有数学。1和0被视为true和false。Ohhhhh好的,我现在明白了。谢谢