CREATE TABLE fruit ( id INT PRIMARY KEY AUTO_INCREMENT, name ENUM('apple', 'banana', 'orange', 'watermelon') );
在这个例子中,fruit表中的name列定义了一个ENUM数据类型,该枚举列包含四个选项:apple、banana、orange和watermelon。在插入数据时,只能插入这四个选项中的其中一个,否则将插入一个无效值并引发错误。
ENUM数据类型内部表示为整数,每个选项都与一个数字相关联。当存储行时,MySQL将使用相关数字存储ENUM值。例如,在fruit表中添加一行:
INSERT INTO fruit(name) VALUES('banana');
MySQL实际上将’banana’转换为内部表示为2的数字。当检索数据时,MySQL将使用该数字来匹配ENUM选项。例如,在查询水果名称包括’banana’的所有行时,MySQL将执行以下操作:
SELECT * FROM fruit WHERE name = 'banana';
MySQL实际上将’banana’转换为内部表示为2的数字,然后执行以下查询:
SELECT * FROM fruit WHERE name = 2;
在上面的查询中,MySQL将返回所有name列等于2的行,即所有包含’banana’的行。
需要注意的是,如果您添加了一个新的选项并尝试将其插入到ENUM列中,所有使用该列的查询将无法匹配该新选项,因为该选项的数字表示不在查询中。使用ENUM列应该仔细考虑您列出的选项,以防止需要修改该列的所有查询。
综上所述,ENUM数据类型可以提供一种存储少量固定选项的简便方法,并且在查询时可与数字表示进行配对。