mysql更新行到以前的枚举值

时间:2015-04-19 10:24:27

标签: mysql sql enums

我有一个包含2列的简单MYSQL表:

id | status
 1 |  b

statusENUM('a','b','c')

我想更新此行,以便:if:

1)当前状态为c,然后是新值b

2)当前状态为b,然后是新值a

3)当前状态为a,然后不执行任何操作

我尝试了以下但当然不起作用:

UPDATE table SET status = status - 1 WHERE id = '1'

3 个答案:

答案 0 :(得分:3)

UPDATE tablename SET status = case status when 'b' then 'a'
                                          when 'c' then 'b' end
WHERE id = '1' and status <> 'a'

<> 'a'中的WHERE是为了避免交易中的“a”行。)

答案 1 :(得分:2)

试试这样:

update table_name
set status = case when status = 'c' then 'b'
                  when status = 'b' then 'a'
                  when status = 'a' then 'a'
             end
 where id = 1;

答案 2 :(得分:0)

MySQL具有枚举类型的索引值,因此您执行status = status - 1的方法是一种很好的方法。

正如manual所说:

  

每个枚举值都有一个索引:

     
      
  • 列规范中列出的元素将分配索引号,从1开始。
  •   
  • 空字符串错误值的索引值为0.这意味着您可以使用以下SELECT语句查找分配了无效ENUM值的行:SELECT * FROM tbl_name WHERE enum_col=0;
  •   
  • NULL值的索引为NULL。
  •   
  • 这里的术语“索引”是指枚举值列表中的位置。它与表索引无关。
  •   

所以在你的情况下,这些是索引值:

  • NULL:NULL
  • &#39;&#39; (空):0
  • &#39; a&#39;:1,&#39;&#39;:2,&#39; c&#39;:3

基于此,你可以简单地写:

update table set status=status-1 where status>1 and id=1;