2017-11-29 13 views
0

私はAUTO_INCREMENTを追加するとid列が自動的に1から始まる連続番号を生成できると読んでいましたが、その場合はNOT NULLUNIQUEを定義する必要はないと思われます。テーブルを作成するときにNOT NULLAUTO_INREMENTを使用してオンラインで多くの例が表示されるのはなぜですか?MySQL: `AUTO_INCREMENT`を使用すると` ID`カラムが `NOT NULL`で定義されるのはなぜですか?

+1

「NULL」のことは明白ではないかもしれませんが、もちろんキーは「UNIQUE」にする必要があります。この数字は、逐次であることも保証されていません。 – DanFromGermany

答えて

0

Per the documentation null-not-nullとして定義されたauto_idにnull値を割り当てると、nullが次の順次値に置き換えられます。 IDは主キー(またはキーの一部)である可能性が高いため、null値は使用しないでください。

また、per this exampleは、nullでないことを指定していない場合、MySQLがこれを提供します。

+0

ありがとうございました...しかし、まだ少し混乱しています。つまり、 'NOT NULL'が指定されていれば、単に' NULL'を指定することができ、次の連続番号が使われるということです。しかし、 'AUTO_INCREMENT'はそれをやっていませんか?また、あなたの答えの終わりに向かって、もしあなたが 'NOT NULL'を追加しなければ、システムはそれをあなたのためにやってくれると言います...そして、それは私が期待したものです。その時のポイントは?私の質問は、システムがとにかくそれを追加した場合、人々がまだ 'NOT NULL'を追加するのを悩ます理由です。 – Grateful

+1

別の答え:「適切な機能を実現するには、列が値を必要とする場合は、NOT NULLと宣言する必要があります。そういうわけで、人々は気が狂っています。これは、プロジェクト全体がgotoやグローバルで1つのファイルに収まるときに人々がOOPデザインパターンを使用する理由を尋ねるようなものです。 – DanFromGermany

+0

@Grateful MySQLが自動的にそれを追加している場合、人々がそれを指定しているのか、それともMySQLによって提供されているのかをどうやって知ることができますか? (人々はテーブルデザインをリサイクルしてから、 'show create mytable'を実行します) ダンが示しているように、機能をよく知らないユーザーがコードから理解できるようにフィールドは決してnullにはなりません。 –

0

NOT NULLが定義されていれば、文書を再読した後に値を挿入するときに値NULLを使用して自動的に次の連続番号を割り当てることができます。 NOT NULLが定義されていない場合、値0を使用して次の連続番号を割り当てることができます。また、UNIQUEを定義する必要はないことに留意されたい。なぜなら、IDは、通常、これを達成するPRIMARY KEYと組み合わせて使用​​されるからである。

+0

明示的に定義する必要はありませんが、not-nullとして定義する必要があります。 ( 'SHOW CREATE TABLE'を実行すると' NOT NULL'を表示しない 'auto_increment'フィールドを持つテーブルを作成してみてください)。 –

関連する問題