2010-03-17 37 views
6

我有一个值表,其中一列是SET如何更新MySQL SET类型的成员?

如果它当前有成员('a','b','c','d'),那么我应该如何为可能的值添加'e'?

我意识到使用SET类型有点奇怪,我不清楚为什么一个人会用它来代替另一个具有该值的表的外键,但我没有设计数据库问题,并且不能改变那么多。

感谢您的帮助!

更新:我想更新的设定类型为所有行,不只是一个,有没有什么帮助。

回答

5

您要添加的 'e' 的允许值在该设置字段中,或者它已经存在,并且您想要将“e”添加到该表中设置字段的当前值?

如果它不是已经允许的值,那么你就必须做一个ALTER TABLE和重新定义字段:

ALTER TABLE set_test CHANGE myset myset SET('a','b','c','d','e'); 

(是的,“MYSET”是摆在那里的两倍,这是一个“currentname新名字“的东西。)

否则只是做一个更新表,并与前面的答案说,连接'e'字段。

7

要将元素添加到现有SET,请使用CONCAT()函数将新元素添加到逗号分隔列表中。要使用十进制值,我们可以使用按位或运算符|。

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; 
+0

但是,这是一行,将删除WHERE子句添加'旅行'到新行的可能性列表? – Riddari 2010-03-17 19:53:09

+1

是的,这是一个单行。尝试它没有where子句,看看会发生什么。我的猜测是它将它添加到所有行中。我将使用concat()方法与where子句。 – northpole 2010-03-17 20:23:39