我有一個值表,其中一列是SET。如何更新MySQL SET類型的成員?
如果它當前有成員('a','b','c','d'),那麼我應該如何爲可能的值添加'e'?
我意識到使用SET類型有點奇怪,我不清楚爲什麼一個人會用它來代替另一個具有該值的表的外鍵,但我沒有設計數據庫問題,並且不能改變那麼多。
感謝您的幫助!
更新:我想更新的設定類型爲所有行,不只是一個,有沒有什麼幫助。
我有一個值表,其中一列是SET。如何更新MySQL SET類型的成員?
如果它當前有成員('a','b','c','d'),那麼我應該如何爲可能的值添加'e'?
我意識到使用SET類型有點奇怪,我不清楚爲什麼一個人會用它來代替另一個具有該值的表的外鍵,但我沒有設計數據庫問題,並且不能改變那麼多。
感謝您的幫助!
更新:我想更新的設定類型爲所有行,不只是一個,有沒有什麼幫助。
您要添加的 'e' 的允許值在該設置字段中,或者它已經存在,並且您想要將「e」添加到該表中設置字段的當前值?
如果它不是已經允許的值,那麼你就必須做一個ALTER TABLE和重新定義字段:
ALTER TABLE set_test CHANGE myset myset SET('a','b','c','d','e');
(是的,「MYSET」是擺在那裏的兩倍,這是一個「currentname新名字「的東西。)
否則只是做一個更新表,並與前面的答案說,連接'e'字段。
要將元素添加到現有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;
但是,這是一行,將刪除WHERE子句添加'旅行'到新行的可能性列表? – Riddari 2010-03-17 19:53:09
是的,這是一個單行。嘗試它沒有where子句,看看會發生什麼。我的猜測是它將它添加到所有行中。我將使用concat()方法與where子句。 – northpole 2010-03-17 20:23:39