1

我已经为计算机清单创建了一个数据库。我的作业说我只能允许在“Dell”和“IBM”等字段中输入某些词。这是我创建表的方式:

Create table computer_inventory ( 
 assetnumber int(10) not null default 0,
 manufacturer char(3) ENUM('Dell', 'IBM', 'OtherCompany') NOT NULL default ' ', 
 originalcost decimal(12,2) not null default 0, 
 currentvalue decimal(12,2) not null default 0, 
 boughtfrom varchar(20) not null default ' ', 
 instock tinyint(1) not null default 0, 
 currentuser varchar(20) not null default ' ',
 userphonenum varchar(13) not null default ' ',
 boughtdate datetime not null default '0000-00-00'
);

现在我想把它做成一个人只能输入“DELL”或“IBM”的制造商。

4

2 回答 2

2

看看这个特定用例的ENUM类型。

这种类型的字段允许您明确说明此列中允许的内容。对于您的情况,您需要“Dell”和“IBM”以及您希望允许的任何其他公司。

CREATE TABLE tablename (
    company ENUM('Dell', 'IBM', 'OtherCompany')
);

此命令将创建一个tablename包含单个字段 ( ) 的表 ( company)。在该字段中,将只允许三个值。“戴尔”、“IBM”和“其他公司”。

编辑:根据您的编辑,您可以将您的manufacturer行修改为如上所示。

manufacturer ENUM('Dell', 'IBM', 'OtherCompany') NOT NULL

文档中需要注意的一件事:

如果将 ENUM 列声明为 NOT NULL,则其默认值是允许值列表的第一个元素。

在这种情况下,这意味着如果您不通过制造商,它将默认为Dell

于 2013-11-10T03:16:26.800 回答
1

您的代码中有两个错误:

  1. 第三行是不允许的:char(3)因为,您已经声明了具有更多字符的值(dell - 4 个字符)
  2. 第三行不允许:默认“” -因为在您声明的值列表中不是“”。列表中只能有值 ENUM('Dell', 'IBM', 'OtherCompany')

正确的代码:

Create table computer_inventory ( 
assetnumber int(10) not null default 0,
manufacturer ENUM('Dell', 'IBM', 'OtherCompany') NOT NULL, 
originalcost decimal(12,2) not null default 0, 
currentvalue decimal(12,2) not null default 0, 
boughtfrom varchar(20) not null default ' ', 
instock tinyint(1) not null default 0, 
currentuser varchar(20) not null default ' ',
userphonenum varchar(13) not null default ' ',
boughtdate datetime not null default '0000-00-00')
于 2016-05-23T14:24:21.333 回答