在MySQL數據庫中,我們經常需要處理一些多值屬性,例如一個人的愛好有多個,或一部電影的演員有多個。這時候,我們可以使用多個字段來存儲這些值,但這樣會浪費空間,而且難以查詢。因此,我們可以使用一個字段來存儲這些值的集合。
CREATE TABLE person ( id INT NOT NULL, name VARCHAR(30) NOT NULL, hobbies SET('reading', 'swimming', 'traveling', 'music'), PRIMARY KEY (id) );
在上面的代碼中,我們使用了SET類型來存儲一個人的愛好,它只能存儲指定集合中的值。我們也可以使用ENUM類型來存儲一個電影的演員。
CREATE TABLE movie ( id INT NOT NULL, title VARCHAR(50) NOT NULL, actors ENUM('Tom Hanks', 'Tom Cruise', 'Brad Pitt', 'Angelina Jolie'), PRIMARY KEY (id) );
當我們想要查詢某個人的所有愛好時,可以使用FIND_IN_SET函數:
SELECT * FROM person WHERE FIND_IN_SET('reading', hobbies) >0;
當然,我們也可以使用位運算來存儲集合,但它需要更多的處理和計算。總的來說,使用一個字段存儲集合可以提高查詢效率,并減少數據冗余。