2013-04-18 82 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