2010-03-17 53 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