2012-02-15 42 views
2

我在MySQL的新的,我想知道是否有給予一列的區域接受的價值觀讓我們說,從1到9的方式;我正在嘗試以下,但它不起作用。給MySQL的一個int表列的區域允許值從1到9

CREATE TABLE rooms (
    `rNumber` INT(1 -9) NOT NULL AUTO_INCREMENT , 
    PRIMARY KEY (`hNumber`) 
) 

任何幫助表示讚賞。

回答

1

具體取決於你在駕駛什麼,你可能會考慮使用MySQL Enum Type

+0

我覺得Enum很好,謝謝! – Percy 2012-02-15 04:25:12

+0

如果您的問題解決了,您可以將此問題標記爲已回答?謝謝。 – EverPresent 2012-02-15 05:00:18

1

如果你的範圍不包括零那麼enum將工作,MySQL的儲量爲歸零某些錯誤條件:

空字符串錯誤值的索引值是0

如果你真的只想要列中的1-9,你還需要啓用嚴格模式:

如果向ENUM中插入了一個無效值(即,一個字符串不是出現在允許值列表中),則將空字符串插入爲特殊錯誤值。該字符串可以從一個「正常的」空字符串通過此字符串有數值的事實來區分0
[...]
如果啓用嚴格的SQL模式,試圖插入無效枚舉值導致錯誤。

或者,你可以添加一個INSERT和UPDATE觸發器將檢查新rNumber是需要的範圍內raise an exception如果事實並非如此。這種方法或多或少等同於其他數據庫中的CHECK約束。

2

ENUM and SET columns是MySQL特定的。

做你問什麼的最有能力和跨平臺的方式需要你:

  1. 創建一個表包含所有你想要的值:

    CREATE TABLE rValidation (
        rNumber INT AUTO_INCREMENT 
    ) 
    
  2. 相關相應的列在rooms表中用於驗證的列在步驟1中創建的表中,使用foreign key constraint

0

的檢查應該在PHP中進行,如果插入值不在範圍內發生的事情,它將插入一個NULL值

試試這個

$rNo=$_POST['rNumber']; 
if($rNo >=1 && $rNo <=9) 
{ 
// Execute Insert query 
} 
else 
{ 
//display error message saying value not in range 
} 
+0

無論PHP向數據庫發送什麼,「NULL」都不能插入到「NOT NULL」列中。 – 2012-02-15 08:00:03

2

CHECK約束不能在MySQL中執行。他們在CREATE TABLE聲明期間被解析,但被忽略。

一種執行這樣的限制的方法是使用一個FOREIGN KEY約束到基準表,該表具有完全相同9行和只允許SELECT特權它(因此沒有人添加,改變或從它移除行):

CREATE TABLE NineNumbers (
    i INT NOT NULL , 
    PRIMARY KEY (i) 
) 

INSERT INTO NineNumbers (i) 
    VALUES 
    (1),(2),(3),(4),(5),(6),(7),(8),(9) ; 

CREATE TABLE rooms (
    rNumber INT NOT NULL ,   --- AUTO_INCREMENT or not 
             --- PRIMARY KEY or not 
    FOREIGN KEY (rNumber) 
     REFERENCES NineNumbers (i) 
) 
0

使用BETWEEN n AND y。例如:

SELECT id FROM mytable WHERE id BETWEEN 1 AND 20; 
相關問題