2010-03-17 41 views
6

Tôi có một bảng giá trị, với một trong các cột thuộc loại SET.Làm cách nào để cập nhật các thành viên của một Loại Cài đặt MySQL?

Nếu hiện tại có các thành viên ('a', 'b', 'c', 'd'), làm cách nào để thêm 'e' vào các giá trị có thể có?

Tôi nhận thấy rằng việc sử dụng loại SET hơi lạ và tôi không rõ lý do tại sao một người dùng nó thay vì khóa ngoài vào bảng khác với giá trị của tập hợp, nhưng tôi không thiết kế cơ sở dữ liệu câu hỏi, và không thể thay đổi nó nhiều.

Cảm ơn sự giúp đỡ của bạn!

CẬP NHẬT: Tôi muốn cập nhật loại SET cho tất cả hàng, không chỉ một, nếu điều đó giúp.

Trả lời

5

Bạn muốn thêm 'e' với các giá trị cho phép trong trường thiết lập đó, hoặc nó đã ở đó và bạn muốn thêm 'e' vào giá trị hiện tại của trường thiết lập trong bảng đó?

Nếu nó không phải đã là một giá trị cho phép, sau đó bạn sẽ phải làm một TABLE ALTER và xác định lại lĩnh vực này:

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

(vâng, 'myset' được đặt trong đó hai lần, đó là một "currentname newname "loại điều.)

Nếu không, chỉ cần thực hiện BẢNG CẬP NHẬT và kết hợp trường bằng 'e' như câu trả lời trước đó.

7

Để thêm phần tử vào SET hiện tại, hãy sử dụng hàm CONCAT() để thêm phần tử mới vào danh sách được phân tách bằng dấu phẩy. Để làm việc với các giá trị thập phân, chúng ta có thể sử dụng toán tử OR bitwise |.

UPDATE set_test SET myset = CONCAT(myset,",Travel") 
     WHERE rowid = 3; 

hoặc

UPDATE set_test SET myset = myset | 1 WHERE rowid = 3; 

Bạn cũng có thể sử dụng CONCAT_WS() chức năng, mà xử lý dải phân cách danh sách cho chúng ta:

UPDATE set_test SET myset = CONCAT_WS(',',myset,'Dancing') 
     WHERE rowid = 6; 
+0

Nhưng đây là một hàng, sẽ loại bỏ mệnh đề WHERE thêm 'Du lịch' vào danh sách các khả năng cho hàng mới? – Riddari

+1

có, đây là một hàng duy nhất. Hãy thử nó mà không có mệnh đề where và xem điều gì xảy ra. Tôi đoán là nó thêm nó vào tất cả các hàng. Tôi sẽ sử dụng phương thức concat() với mệnh đề where out. – northpole

Các vấn đề liên quan