非トランザクションテーブルを簡単に処理できるように、MySQL のすべてのフィールドにはデフォルト値が設定されています。
NOT NULL
カラムにおける
NULL
や数値カラムにおける大きすぎる数値のように
'正しくない' 値をカラムに挿入した場合、MySQL
ではエラーを生成するのではなく、カラムを
'最適可能値'
に設定します。数値については、0、使用可能な最小値、または使用可能な最大値です。文字列については、空白文字列、またはカラム内で使用可能な最長文字列です。
つまり、NULL
値を使用することができないカラムに
NULL
を格納しようとすると、0
または
''
(空白文字列)が代わりに格納されます。単一レコードの挿入については、この後者の動作を
-DDONT_USE_DEFAULT_FIELDS
コンパイルオプションを使用して変更することができます。See
項2.3.3. 「一般的な configure
オプション」。この場合、非
NULL
値を必要とするすべてのカラムについて明示的に値を指定しない限り、INSERT
ステートメントでエラーが生成されます。
前述のルールの理由は、クエリの実行が開始される前にこれらの条件をチェックできないためです。複数のレコードを更新した後で問題が発生した場合、テーブル型でサポートされていない可能性があるため、単にロールバックすることはできません。停止するというオプションは、この場合、更新が '未完了' のため、最悪のシナリオになる可能性があるので、適切ではありません。'できる限りのことを行って'、何も問題が発生していないものとして処理を続行する方が適切です。MySQL 5.0 では、自動フィールド変換に関する警告と、トランザクションテーブルのみを使用するステートメントで許可されていないフィールド割り当てが行われた場合にステートメントをロールバックすることができるオプションを提供することで、これを改善する予定です。
このことは、通常、フィールドの内容をチェックするために MySQL を使用するのではなく、アプリケーションでこれを処理しなければならないことを意味します。
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.