3

我试图在我的一个创建语句中为我的 INT 提供一系列可能的值,即

创建表站点(
    **SiteID INT (1,4),**
    UserID INT UNSIGNED 不为空,
    名称 varchar(128) 唯一非空,
    外键(UserID)引用用户(UserID),
    主键 (SiteID)
);

我忘记了您用于范围的语法,而且当我尝试按原样使用它时,我很确定我错了。

4

1 回答 1

9

作者注:此答案的前两部分不正确。我认为 MySQL 支持CHECK约束,但它没有。还是不行。要将列限制为简单的值列表,请使用ENUM此答案末尾的方法。如果逻辑更复杂(值范围、基于另一列的值等),唯一的 MySQL 选项是触发器。


如果它是一个,你需要一个CHECK约束INT

CREATE TABLE Site (
  SiteID INT,
  CONSTRAINT SiteID_Ck CHECK (SiteID IN (1, 2, 3, 4)),
  ... and the rest

或者:

CREATE TABLE Site (
  SiteID INT,
  CONSTRAINT SiteID_Ck CHECK (SiteID BETWEEN 1 AND 4),
  ... and the rest

或者,如果您可以使用字符串 SiteID,那么:

CREATE TABLE Site (
  SiteID ENUM('1', '2', '3', '4'),
  ... and the rest
于 2013-04-18T02:31:18.300 回答