【发布时间】:2019-02-12 19:51:56
【问题描述】:
在 MySQL 中可以这样创建一个枚举:
USE WorldofWarcraft;
CREATE TABLE [users]
(
ID INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
username varchar(255),
password varchar(255),
mail varchar (255),
rank ENUM ('Fresh meat', 'Intern','Janitor','Lieutenant','Supreme being')DEFAULT 'Fresh meat',
);
这在 SQL Server 中是不可能的,那么有什么替代方案?
我看过这篇文章
SQL Server equivalent to MySQL enum data type?
推荐类似的东西
mycol VARCHAR(10) NOT NULL CHECK (mycol IN('Useful', 'Useless', 'Unknown'))
如何获得这项工作并创建一个默认值?
枚举的目的是能够将其与网站上的图形下拉菜单联系起来,该下拉菜单向用户提供值并预先指定默认值。
【问题讨论】:
-
您可以添加default constraint
-
老实说,我认为它完全是best to ignore ENUM types 并在您的应用程序中处理验证,而不是在您的数据库中。也许这是因祸得福。
-
我会改用一个 INT 值,并将其设为具有 ID 和描述等列的 [Rank] 表的外键。
-
根据您的编辑,您似乎只需要一个域表(通常随便称为查找表),由带有外键的用户表引用。不要使用
IDENTITY,而是使用您控制的值,这样您就可以在您的应用程序代码中维护一个始终与数据库同步的枚举。该表还可以包含一个指示符,指示哪一行是所需的默认值。 -
我也同意外键方法会更好,但如果你仍然需要,这是检查约束的语法:
... rank varchar(250) NOT NULL CONSTRAINT check_rank CHECK (rank IN('Fresh meat', 'Intern','Janitor','Lieutenant','Supreme being') ) DEFAULT 'Fresh meat' ...
标签: sql sql-server enums