MySQLの整数列に正の整数制約を追加する

列に正の値だけを強制する制約を追加するにはどうすればよいですか。

次のMySQLのステートメントを試してみましたが、それは動作しません

create table test ( test_column integer CONSTRAINT blah > 0);
ベストアンサー
整数では「符号」を使用できないことを示すために、キーワードunsignedを使用します(つまり、正の値にしかなれません)。

CREATE TABLE test (
    test_column int(11) unsigned
);

数値データ型(符号付き&符号なし)hereの詳細を読むことができます。

負の値の挿入を防ぐための実際の制約に関しては、MySQLにはCREATE TABLEステートメントで使用できるCHECK節があります。

The CHECK clause is parsed but ignored by all storage engines.

参考のために、これを使用する方法を次に示します(絶対に問題なく実行されますが、手動では説明されていないので、何もしません)。

CREATE TABLE test (
    test_column int(11) unsigned CHECK (test_column > 0)
);

UPDATE(負の値を完全に拒否する)
負の値を持つクエリは完全に拒否され、0に設定されないようにすることが、いくつかのコメントからわかりました(通常の符号なし列へのトランザクションの場合と同様)。これを一般的に行うことができる制約はありません(少なくとも私が知っていることですが)が、(STRICT_TRANS_TABLESで)strict-modeをオンにすると、符号なしの列に負の値を挿入するクエリはエラーで失敗します。 (無効な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設定に影響を与えるかどうかはわかりませんので、実際の設定ファイルを更新することをお勧めします)。

転載記事の出典を記入してください: MySQLの整数列に正の整数制約を追加する - コードログ