仅更新设置类型列上的一项可设置项目?

发布于 2024-11-27 17:27:07 字数 871 浏览 0 评论 0原文

我的问题是:我需要仅使用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

各自安好 2024-12-04 17:27:07
set setlist=if(setlist is null, 'option_a', concat(setlist,',option_a'));

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

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

ps - column id is unique, limit 1 is superfluous

半仙 2024-12-04 17:27:07

使用 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;

use CONCAT_WS so you don't have to check for NULL or add a comma to the string

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

or if you option is the third element in your setlist use the bit with a bitwise OR

UPDATE table SET setlist = setlist | 4;

if you want to remove it, use bitwise AND with inverted bitset

UPDATE table SET setlist = setlist &~ 4;

and if you want to toggle option on/off, use bitwise XOR

UPDATE table SET setlist = setlist ^ 4;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文