16.20 - NOT NULL句 - Teradata Vantage NewSQL Engine

Teradata Vantage™ データ タイプおよびリテラル

prodname
Teradata Database
Teradata Vantage NewSQL Engine
vrm_release
16.20
category
プログラミング リファレンス
featnum
B035-1143-162K-JPN

目的

列のフィールドに値が入っている必要があることを指定します。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));