多くの種類の SQL では、行を挿入するたびに列を暗黙的に NULL に設定する方法が 3 つあります。これらは:
columnname type NULL
columnname type DEFAULT NULL
columnname type NULL DEFAULT NULL
つまり、最初のものは (NOT NULL ではなく) NULL フラグを設定し、2 番目のものは NULL フラグをデフォルト値のままにし、3 番目のものは NULL フラグを設定し、暗黙的な値を NULL として設定します。
テーブルまたはスキーマの NULL フラグのデフォルト値もカスタマイズできるため、Microsoft SQL では 2 番目のバリエーションがまったく同じではないという話を聞いたことがあります。
しかし、MySQL の場合、そのような機能があるとは思えません。さらに、MySQL では、NOT NULL カラムとは異なり、厳密モードがオンになっていても、明示的な値がない場合、NULL フラグを持つカラムは挿入時に常に暗黙的に NULL に設定されます。したがって、これらの列宣言はすべて同一のままです。
私の MySQL スクリプトでは、NOT NULL 列ごとに、厳密モードを有効にした場合の問題を回避するために、アプリケーションの一部の挿入で設定する予定のない列に DEFAULT 値を指定します。したがって、3 番目のバリエーションを選択すると、最も冗長で明示的ですが、より対称的なものになると思います。3 番目のバリエーションのような宣言は一般的ですか、それとも他のスクリプトでは 1 番目または 2 番目のバリエーションの方がより頻繁に発生しますか?
MySQL ダンプが使用するエイリアスであるため、2 番目のアプローチに頼ることを検討していましたが、列宣言のデフォルト句で整数リテラルを文字列 (一重引用符) としてダンプするため、それが良い考えかどうかはわかりません。
この質問は、解決策があるというよりは意見のように見えるかもしれませんが、私が気付いていない潜在的な落とし穴にも注意したいと思います. 将来、MySQL から PostgreSQL に移行することを選択するかもしれません。また、たとえば PostgreSQL が MS-SQL のようにこれらのケースを区別する場合など、これらの専門家からのアドバイスも利用できます。間違った仮定をした場合は、間違っている場合は訂正してください。