目的
列のフィールドに値が入っている必要があることを指定します。NULLであってはなりません。
構文
ANSI準拠
NOT NULLは、ANSI SQL:2011に準拠しています。
使用上の注意
列に対するNOT NULL指定は、その列のすべてのフィールドに値が格納されることを保証します。その列に対応する値のない行データや、その列がNULLの行データを列に挿入しようとすると、エラーが返されます。
NOT NULL句をALTER TABLE文中の列に指定する場合、そのテーブルが空でないかぎり、DEFAULTまたはWITH DEFAULT句も指定する必要があります。これで、NOT NULL指定に従って、その列のどの空のフィールドにもデフォルト値が確実に供給されるようになります。
推奨事項: 最善策として、NULLを許可する正当な理由がない限り、すべての列に対してNOT NULLを指定することを検討してください。
列にNULLを格納する必要がある場合は、その列にとってNULLが何を意味しているかを確実に理解している必要があります。これは、NULLにはいくつもの解釈があるためです。 場合によっては、NULLを許可するよりも、非NULLのデフォルト値を定義した方が良いこともあります。列に非NULLのデフォルト値を指定するときには、その列にNOT NULLを指定することも検討してください。
列をヌル受入れ可能にすると(実際には、その列にヌルが格納されていなくても)、その列のヌル可能性を示すためのプレゼンス ビットが、すべての行に含まれることになります。その場合、このプレゼンス ビットを収容するための追加のプレゼンス バイト必要になると、行サイズの増加を招くことになります。列にヌルを格納する必要がないときには、NOT NULLを指定することで、このプレゼンス ビットの必要性がなくなり、行ごとのバイトを節約できることもあります。
NOT NULLを指定すると、一部のクエリーに対して優れた最適化が得られるようにもなります。これは、列内のNULLやNULLの可能性を扱うための余分な処理を回避できるためです。
NULLを使用した場合の利点と欠点についての詳細は、<Teradata Vantage™ - データベースの設計、B035-1094>を参照してください。
例: NOT NULL句
以下のテーブル定義では、FullName列がNOT NULLと定義されているため、Membersテーブルのすべての行に必ずFullNameの値が存在するようになります。
CREATE TABLE Members( FullName VARCHAR(42) NOT NULL, Status CHAR(6), Phone CHAR(10));