只更新set type列上的一个可设置项?

时间:2011-08-04 17:04:51

标签: mysql set

我的问题是:我只需要使用SQL启用/禁用MySQL上的特定项类型列,而不会丢失以前的数据。

伪示例:

    UPDATE `table`
    SET `setlist` = TOGGLE_SET(`setlist`, 'option_a`, true)
    WHERE `id` = 1
    LIMIT 1

Obs。: TOGGLE_SET(列数据,字符串选项,bool模式)是假方法,不存在,只是为了理解。

创建示例:

    CREATE TABLE `table` (
        `id` INT(10) UNSIGNED NULL AUTO_INCREMENT,
        `setlist` SET('option_a', 'option_b') NULL DEFAULT NULL,
        PRIMARY KEY (`id`)
    )
    ENGINE=InnoDB;

插入示例:

    INSERT INTO `table` (`id`, `setlist`) VALUES (1, 'option_b');

类似的更新示例:

    UPDATE `table`
    SET `setlist` = 'option_a,option_b'
    WHERE `id` = 1
    LIMIT 1

一切都好!

2 个答案:

答案 0 :(得分:2)

set setlist=if(setlist is null, 'option_a', concat(setlist,',option_a'));

ps - 列id是唯一的,limit 1是多余的

答案 1 :(得分:0)

使用CONCAT_WS,这样您就不必检查NULL或在字符串中添加逗号

UPDATE table SET setlist = CONCAT_WS(",", setlist, "option");

或者如果option是您的setlist中的第三个​​元素,请使用位按位OR

UPDATE table SET setlist = setlist | 4;

如果要删除它,请使用按位AND和反转位集

UPDATE table SET setlist = setlist &~ 4;

如果要打开/关闭option,请使用按位XOR

UPDATE table SET setlist = setlist ^ 4;