在MySQL數據庫中,有一種非常實用的數據類型叫做SET,它可以讓我們在一列中存儲多個選項,這在某些場景下可以減少表的數量,提高數據的整合性。
CREATE TABLE `users` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(50) DEFAULT NULL, `interest` set('運動','音樂','旅游','閱讀','編程') DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
在上述MySQL的建表語句中,`interest`列使用了SET類型,并且設置了五個選項。當我們往這個表中添加數據時,可以使用以下語句:
INSERT INTO `users` (`name`, `interest`) VALUES ('張三', '運動,音樂'); INSERT INTO `users` (`name`, `interest`) VALUES ('李四', '旅游,閱讀,編程');
可以看到,我們在插入數據時,在`interest`列中使用英文逗號來分隔多個選項。查詢時也可以使用類似的方式:
SELECT * FROM `users` WHERE FIND_IN_SET('旅游',`interest`) >0;
上述語句可以查詢出`interest`列中包含“旅游”選項的所有數據。同樣,我們也可以使用以下語句查詢`interest`列中包含“音樂”和“編程”選項的所有數據:
SELECT * FROM `users` WHERE FIND_IN_SET('音樂',`interest`) >0 AND FIND_IN_SET('編程',`interest`) >0;
這里注意,在使用FIND_IN_SET函數時,需要使用大于0的條件,否則會查詢失敗。
另外,需要注意的是,在使用SET類型時,每個選項都會占用一個字節的存儲空間。因此,如果選項很多,就可能造成存儲空間的浪費。
綜上所述,SET類型在MySQL中的使用非常方便,可以幫助我們在一列中存儲多個選項,并且查詢也非常簡單方便。