2013-04-18 41 views
0

我想给我的INT的可能值的范围我创建语句之一,即SQL整数范围在创建表

 
CREATE TABLE Site(
    **SiteID INT (1,4),** 
    UserID INT UNSIGNED Not Null, 
    Name varchar(128) Unique Not Null, 
    Foreign Key (UserID) References Users(UserID), 
    Primary key (SiteID) 
); 

我忘了,你使用范围的语法,和我我很确定我犯了错误,当我试图按原样使用它。我在这里先向您的帮助表示感谢。

+0

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

或者,如果你可以用一个字符串SITEID接活你是什​​么数据库使用? – Richard 2013-04-18 01:57:04

+0

http://www.w3schools.com/sql/sql_check.asp – OldProgrammer 2013-04-18 01:57:07

+0

@Richard,我正在使用MySQL。 – 2013-04-18 01:58:24

回答

3

作者注解:这个答案的前两部分是不正确的。我认为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 ENUM('1', '2', '3', '4'), 
    ... and the rest 
+0

看起来CHECK在MySQL中实际上不起作用:“CHECK子句被解析,但被所有存储引擎忽略。” https://dev.mysql.com/doc/refman/5.0/en/create-table.html – 2015-10-28 17:26:28

+0

你是对的杰克,谢谢你指出这一点。我不记得回答这个问题的原因,因为它已经这么久了,但是在那段时间,我只是在经过多年的Oracle和SQL Server后才涉足MySQL领域。后来我发现它不支持CHECK约束。发现很难相信,但2年以上仍然没有。好奇,因为我认为这比PK或FK更容易实施。尽管如此,最后一个选项('ENUM')的作品。我已添加免责声明。 – 2015-10-29 02:49:16