2012-02-15 3 views

答えて

1

あなたが運転しているものによっては、MySQL Enum Typeの使用を検討することもできます。

+0

私は列挙型は罰金のおかげだと思います!あなたの問題が解決されている場合は答えとして – Percy

+0

あなたがこの質問をマークすることができますか?ありがとう。 – EverPresent

1

あなたの範囲はenumが動作するゼロが含まれていない場合は、MySQLの埋蔵量は、特定のエラー状態のためにゼロ:

空の文字列のエラー値が0

でのインデックス値実際に列に1-9だけが必要な場合は、厳密モードを有効にする必要があります。

無効な値をENUMに挿入すると、許可された値のリストにある)、空の文字列が特別なエラー値として代わりに挿入されます。
[...]
厳密なSQLモードが有効な場合、無効なENUM値を挿入しようとするとエラーが発生します。この文字列は、通常の空の文字列と区別できます。 。

また、あなたはそれがなかった場合raise an exceptionを新しいrNumberが所望の範囲内であったことを確認してしまうINSERTやUPDATEトリガーを追加することができます。このアプローチは、他のデータベースのCHECK制約とほぼ同等です。

2

ENUM and SET columnsは、MySQL固有のものです。

あなたが求めるものを行うための最も有能かつクロスプラットフォーム手段はする必要があります:

  1. は、あなたが望むすべての値を格納するテーブルを作成します。

    CREATE TABLE rValidation (
        rNumber INT AUTO_INCREMENT 
    ) 
    
  2. は、適切な列を関連付けますroomsテーブルで、手順1で作成したテーブルの検証に使用する列に、aを使用して、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'列に挿入することはできません。 –

2

CHECK制約がMySQLのでは適用されません試してみてください。それらはCREATE TABLEステートメント中に解析されますが、無視されます。そのような制約を強制する

一つの方法は、それだけにSELECT特権を許可正確に9行とを有する参照テーブルにFOREIGN KEY制約を使用することである(そう誰も変更を加えないか、それから行を削除):

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; 
関連する問題