这就是column type "enum"的用途。你把它像一个字符串,并在幕后它被存储为一个int,并且必须在DDL中定义的值之一:
CREATE TABLE users (
id int unsigned NOT NULL auto_increment primary key,
user_type enum('ADMIN', 'AGENT', 'CUSTOMER') NOT NULL default 'CUSTOMER'
)
然后插入像这样:
INSERT INTO users (user_type) VALUES ('ADMIN'); // success
INSERT INTO users (user_type) VALUES ('ANONYMOUS'); // failure (or '' if not "strict" mode)
INSERT INTO users (user_type) VALUES (default(user_type)); // uses default
INSERT INTO users() VALUES(); // uses default
INSERT INTO users (user_type) VALUES (NULL); // failure
注
请注意,对于查询实际失败,您必须使用“SQL严格模式”。否则,将插入一个“空字符串”值(稍微有点特殊,因为它的数值为0)。
引用this docs page:
当本说明书提到“严格模式”,它是指其中启用STRICT_TRANS_TABLES或STRICT_ALL_TABLES中的至少一者的模式。
谢谢!真的很有帮助。有关如何使用空的'user_type'将插入语句默认为'CUSTOMER'的任何评论? – mtk
是的,只是要么不将它包含在列表中,要么使用'default'函数:'VALUES(默认(user_type))' –
(用更多的插入示例更新答案) –