2012-02-20 9 views
1

データベース列の積分入力を特定の桁数に制限するにはどうすればよいですか? データベース列の制限

CREATE TABLE tab (id INT <1 digit> not null, value INT <10 digits> not null); 

はあなたの短いバージョンは、より適切なデータ型になります TINYINT UNSIGNED NOT NULLを使用している

+0

'mysql'または' sql'をトリガーする必要があるだろう? – diEcho

+0

ああ、申し訳ありません、そのmysql – user1155788

答えて

5

SQL Serverの例を(、CHECK制約をサポートしていませんMySQLの)チェック制約(SQL Serverなど)やトリガーを追加します。

CREATE TABLE tab (
    id tinynot null CHECK (id BETWEEN 0 AND 9), 
    value INT not null CHECK (id BETWEEN 1000000000 AND 9999999999) 
); 
その後、
  • あなたが唯一の1桁けれどもたい場合は、使用するtinyint
  • 電話番号を格納していない場合(たとえば "123456789 bananas")、電話番号の場合はvarchar型を使用します。 https://stackoverflow.com/a/8284674/27535

編集を参照してください、あなたは、MySQL

+0

CHECK構文はMySQLには適していません(この回答の後に明確になっていますが、明確にするためにポストアップしています) –

+0

+1 CHECKs。 ?バナナ:) – StuartLC

+0

@ Simonatmso.net:それは私の答えの後に明らかになった – gbn

0

をありがとう、それが格納された値を制限することはできません。

長いバージョンの方が、MySQL integer data typesをお読みになることをお勧めします。 TINYINTは、-128〜+ 127、または0〜+ 255の値を格納する1バイトの列であるため、目的には十分であることがわかります。

第2に、TINYINT(1)と定義すると、表示幅が1桁のTINYINTとして定義されます。これにより、10を超える値が格納されることはありません。この動作の詳細については、numeric type attributesを参照してください。

+0

ありがとう、あなたは私が何をしているのか知っていますか?私は本当に明日実際に自分のプロジェクトをやらなければならないでしょう、誰も私を "落として"いらない...ありがとう。 :-D – user1155788

+0

ところで、私はユーザーVARCHAR(1)と思う。もう何も読む必要はないので、より良いことです。 - :D – user1155788

+0

文字列の長さを知るためにVARCHARが1バイト(短い長さ)を必要とするため、CHAR(1)が1バイトを使用する場合、VARCHAR(1)は2バイトのデータを使用します(VARCHAR =文字列+長さ@文字列の長さが255文字以下の場合は1バイト、文字列は文字列に関係なく1文字あたり1バイトです)したがって、すべてのセルに1バイトの文字列、つまり1文字があれば、CHAR 1) –