Mysql将字段的值限制为已定义的字段之一

mtk*_*mtk 1 mysql validation

我正在使用mysql数据库.

user_typeUSER桌子上有一个字段.我想将此字段中的值限制为('ADMIN','AGENT','CUSTOMER')之一.

如果插入语句尝试插入除上述可能值之外的任何内容,则它们应该失败.另外,我需要默认为'CUSTOMER',在insert语句中没有指定.

我能想到的可能的解决方案是使用triggers,但我想知道如何更有效地处理它(可能在create table ddl本身?).

任何想法,怎么做?

Chr*_*hey 7

这是列类型"枚举"的用途.您将其视为字符串,并在幕后将其存储为int,并且必须是DDL中定义的值之一:

CREATE TABLE users (
  id int unsigned NOT NULL auto_increment primary key,
  user_type enum('ADMIN', 'AGENT', 'CUSTOMER') NOT NULL default 'CUSTOMER'
)
Run Code Online (Sandbox Code Playgroud)

然后像这样插入:

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
Run Code Online (Sandbox Code Playgroud)

注意

请注意,要使查询实际失败,必须使用"SQL严格模式".否则,插入"空字符串"值(稍微特殊,因为它的数值为0).

引用此文档页面:

当本手册引用"严格模式"时,它表示启用了STRICT_TRANS_TABLES或STRICT_ALL_TABLES中的至少一个的模式.