私は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に挿入すると、許可された値のリストにある)、空の文字列が特別なエラー値として代わりに挿入されます。
[...]
厳密なSQLモードが有効な場合、無効なENUM値を挿入しようとするとエラーが発生します。この文字列は、通常の空の文字列と区別できます。 。
また、あなたはそれがなかった場合raise an exceptionを新しいrNumber
が所望の範囲内であったことを確認してしまうINSERTやUPDATEトリガーを追加することができます。このアプローチは、他のデータベースのCHECK制約とほぼ同等です。
ENUM and SET columnsは、MySQL固有のものです。
あなたが求めるものを行うための最も有能かつクロスプラットフォーム手段はする必要があります:
は、あなたが望むすべての値を格納するテーブルを作成します。
CREATE TABLE rValidation (
rNumber INT AUTO_INCREMENT
)
は、適切な列を関連付けますrooms
テーブルで、手順1で作成したテーブルの検証に使用する列に、aを使用して、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'列に挿入することはできません。 –
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)
)
使用BETWEEN n AND y
。例:
SELECT id FROM mytable WHERE id BETWEEN 1 AND 20;
私は列挙型は罰金のおかげだと思います!あなたの問題が解決されている場合は答えとして – Percy
あなたがこの質問をマークすることができますか?ありがとう。 – EverPresent