我有一个值表,其中一列是SET类型。
如果它当前有成员('a','b','c','d'),如何在可能的值中添加“e”?
我意识到使用SET类型有点奇怪,而且我不清楚为什么会使用它而不是外键到另一个具有该值的表的外键,但我没有设计有问题的数据库,并且无法改变它。
感谢您的帮助!
更新:我想更新所有行的SET类型,而不只是一行,如果有帮助的话。
答案 0 :(得分:9)
要向现有SET添加元素,请使用CONCAT()函数将新元素添加到逗号分隔列表中。要使用十进制值,我们可以使用按位OR运算符|。
UPDATE set_test SET myset = CONCAT(myset,",Travel")
WHERE rowid = 3;
或
UPDATE set_test SET myset = myset | 1 WHERE rowid = 3;
您还可以使用CONCAT_WS()函数,它为我们处理列表分隔符:
UPDATE set_test SET myset = CONCAT_WS(',',myset,'Dancing')
WHERE rowid = 6;
答案 1 :(得分:7)
您想要将“e”添加到该设置字段中的允许值,或者它已经存在,并且您想要将“e”添加到该表中设置字段的当前值?
如果它不是允许值,那么你必须做一个ALTER TABLE并重新定义字段:
ALTER TABLE set_test CHANGE myset myset SET('a','b','c','d','e');
(是的,'myset'被放在那里两次,它是“currentname newname”的东西。)
否则只需执行UPDATE TABLE并将字段与'e'连接,如上一个答案所示。