キーワードunsigned
を使用します 整数が「符号」を許可しないことを示すには(つまり、正の値のみにすることができます):
CREATE TABLE test (
test_column int(11) unsigned
);
数値データ型(符号付きおよび符号なし)の詳細を読むことができますここ 。
実際の制約に関する限り 負の値の挿入を防ぐために、MySQLには<があります。 code> CHECK
CREATE TABLE
で使用できる句 ただし、ドキュメントによると、ステートメント:
参考までに、次のように使用します(マニュアルに記載されているように、完全に正常に実行されますが、何も実行されません):
CREATE TABLE test (
test_column int(11) unsigned CHECK (test_column > 0)
);
更新 (負の値を完全に拒否する)
いくつかのコメントから、負の値を持つクエリを完全に拒否し、 0
に設定しないようにしたいことに気づきました。 ( unsigned
への通常のトランザクションとして 列で十分です)。これを一般的に(少なくとも私が知っている)実行できる制約はありませんが、strict-modeをオンにすると( STRICT_TRANS_TABLES
)符号なし列に負の値を挿入するクエリは、エラーで失敗します(無効な enum
などの他のデータ挿入エラーも一緒に) 値)。
insert-commandsの前に次のコマンドを実行することでテストできます:
SET @@SESSION.sql_mode = 'STRICT_TRANS_TABLES';
また、機能する場合は、MySQL構成を sql-mode ="STRICT_TRANS_TABLES"
で更新できます。 または、 SET @@ GLOBAL.sql_mode ='STRICT_TRANS_TABLES';
を使用します ( SET
かどうかはわかりません ただし、コマンドはグローバルmysql構成に影響を与えるため、実際の構成ファイルを更新する方がよい場合があります。