仅更新设置类型列上的一项可设置项目?
我的问题是:我需要仅使用 SQL 启用/禁用 MySQL 上设置类型列的特定项目,而不会丢失以前的数据。
伪示例:
UPDATE `table`
SET `setlist` = TOGGLE_SET(`setlist`, 'option_a`, true)
WHERE `id` = 1
LIMIT 1
观察: TOGGLE_SET(column data, string option, bool mode) 是一个假方法,不存在,仅供理解。
创建示例:
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
就这样!
My problem is: I need enable/disable a specific item of set type column on MySQL using only SQL, without lose previous data.
Pseudo-example:
UPDATE `table`
SET `setlist` = TOGGLE_SET(`setlist`, 'option_a`, true)
WHERE `id` = 1
LIMIT 1
Obs.: TOGGLE_SET(column data, string option, bool mode) is a fake method, don't exists, is just for understand.
Create example:
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 example:
INSERT INTO `table` (`id`, `setlist`) VALUES (1, 'option_b');
Similar update example:
UPDATE `table`
SET `setlist` = 'option_a,option_b'
WHERE `id` = 1
LIMIT 1
It's all!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
ps - 列
id
是唯一的,limit 1
是多余的ps - column
id
is unique,limit 1
is superfluous使用
CONCAT_WS
这样您就不必检查 NULL 或向字符串添加逗号,或者如果您的
option
是您的 第三个 元素setlist 使用带有按位 OR 的位,如果要删除它,请使用按位 AND 与反转位集
,如果要打开/关闭
option
,请使用按位 XORuse
CONCAT_WS
so you don't have to check for NULL or add a comma to the stringor if you
option
is the third element in your setlist use the bit with a bitwise ORif you want to remove it, use bitwise AND with inverted bitset
and if you want to toggle
option
on/off, use bitwise XOR