MySQL作為一款強大的數據庫管理系統,除了支持基本的數據類型外,還提供了字典(ENUM)和枚舉(SET)類型。
字典類型可以在列創建時指定一組值,這些值可以在插入或更新時使用。字典類型的值必須是列定義中的值之一或空字符串(如果該列允許空值)。例如:
CREATE TABLE fruit ( id INT(11) NOT NULL AUTO_INCREMENT, name VARCHAR(50) NOT NULL, color ENUM('red', 'green', 'blue', 'yellow') NOT NULL, PRIMARY KEY (id) );
在這個例子中,color列只能包含在定義中的顏色值之一。如果我們嘗試插入一行沒有在定義中出現的值,會得到以下錯誤:
INSERT INTO fruit (name, color) VALUES ('orange', 'orange'); ERROR 1265 (01000): Data truncated for column 'color' at row 1
這很明顯地告訴我們,數據被截短了,因為它不符合列定義。然而,如果我們仍想在color列中插入'orange'值,我們可以將列定義更改為:
color ENUM('red', 'green', 'blue', 'yellow', 'orange') NOT NULL,
這樣,'orange'就可以被成功地插入color列中。
另一個類型是枚舉(SET)類型。枚舉類型允許我們指定一組可能的值,但它允許多個值被插入到同一個列中。比如:
CREATE TABLE toppings ( pizza_id INT(11) NOT NULL, toppings SET('cheese', 'pepperoni', 'mushrooms', 'bacon') NOT NULL, PRIMARY KEY (pizza_id) );
在上面的表定義中,每個pizza可以有多種配料(cheese,pepperoni,mushrooms,bacon),因為它們都是集合元素。如果我們插入以下值到toppings列中:
INSERT INTO toppings (pizza_id, toppings) VALUES (1, 'cheese, mushrooms');
我們可以看到,我們成功地插入了兩個配料值到同一個列中。
無論是字典類型還是枚舉類型,都可以幫助我們更好地規范化數據,減少數據輸入錯誤的發生,以及方便數據的查詢和分析。