sql >> データベース >  >> RDS >> Mysql

MySQLの整数列に正の整数制約を追加するにはどうすればよいですか?

    キーワード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構成に影響を与えるため、実際の構成ファイルを更新する方がよい場合があります。



    1. MySQLとTomcatが実行されているかどうかを確認するにはどうすればよいですか?

    2. 可変列名のMySQL選択クエリ

    3. ストアドプロシージャの作成中にMySQL構文エラーが発生しました

    4. AndroidとOracleデータベースを接続するための最良の方法は何ですか?