我在MySQL的新的,我想知道是否有給予一列的區域接受的價值觀讓我們說,從1到9的方式;我正在嘗試以下,但它不起作用。給MySQL的一個int表列的區域允許值從1到9
CREATE TABLE rooms (
`rNumber` INT(1 -9) NOT NULL AUTO_INCREMENT ,
PRIMARY KEY (`hNumber`)
)
任何幫助表示讚賞。
我在MySQL的新的,我想知道是否有給予一列的區域接受的價值觀讓我們說,從1到9的方式;我正在嘗試以下,但它不起作用。給MySQL的一個int表列的區域允許值從1到9
CREATE TABLE rooms (
`rNumber` INT(1 -9) NOT NULL AUTO_INCREMENT ,
PRIMARY KEY (`hNumber`)
)
任何幫助表示讚賞。
具體取決於你在駕駛什麼,你可能會考慮使用MySQL Enum Type。
如果你的範圍不包括零那麼enum
將工作,MySQL的儲量爲歸零某些錯誤條件:
空字符串錯誤值的索引值是0
如果你真的只想要列中的1-9,你還需要啓用嚴格模式:
如果向ENUM中插入了一個無效值(即,一個字符串不是出現在允許值列表中),則將空字符串插入爲特殊錯誤值。該字符串可以從一個「正常的」空字符串通過此字符串有數值的事實來區分0
[...]
如果啓用嚴格的SQL模式,試圖插入無效枚舉值導致錯誤。
或者,你可以添加一個INSERT和UPDATE觸發器將檢查新rNumber
是需要的範圍內raise an exception如果事實並非如此。這種方法或多或少等同於其他數據庫中的CHECK約束。
ENUM and SET columns是MySQL特定的。
做你問什麼的最有能力和跨平臺的方式需要你:
創建一個表包含所有你想要的值:
CREATE TABLE rValidation (
rNumber INT AUTO_INCREMENT
)
相關相應的列在rooms
表中用於驗證的列在步驟1中創建的表中,使用foreign key constraint
的檢查應該在PHP中進行,如果插入值不在範圍內發生的事情,它將插入一個NULL值
試試這個
$rNo=$_POST['rNumber'];
if($rNo >=1 && $rNo <=9)
{
// Execute Insert query
}
else
{
//display error message saying value not in range
}
無論PHP向數據庫發送什麼,「NULL」都不能插入到「NOT NULL」列中。 – 2012-02-15 08:00:03
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)
)
使用BETWEEN n AND y
。例如:
SELECT id FROM mytable WHERE id BETWEEN 1 AND 20;
我覺得Enum很好,謝謝! – Percy 2012-02-15 04:25:12
如果您的問題解決了,您可以將此問題標記爲已回答?謝謝。 – EverPresent 2012-02-15 05:00:18