我的问题是:我只需要使用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
一切都好!
答案 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;