配列の最初の要素 (ほとんどのプログラミング言語) の ID (インデックス) は 0 です。MySQL テーブルの最初の要素 (行) の (自動インクリメントされた) ID は 1 です。後者は例外のようです。
3 に答える
より適切な質問は、「なぜ配列のインデックスが 0 なのか?」ということです。その理由は、ポインター演算に関係しています。配列のインデックスは、ポインター アドレスに相対的なオフセットです。C++ では、 array が与えられるとchar x[5]
、式x[1]
と*(x + 1)
は同等であり、 が与えられsizeof(char) == 1
ます。
したがって、1 から始まるフィールドの自動インクリメントは理にかなっています。配列とこれらのフィールドの間に実際の相関関係はありません。
次のように、自動インクリメント列の開始を任意の数値に設定できます。
ALTER TABLE tbl AUTO_INCREMENT = 1;
ALTER TABLE tbl AUTO_INCREMENT = 10;
ALTER TABLE tbl AUTO_INCREMENT = 100;
デフォルトは 1 です。
以下も参照してください。
http://dev.mysql.com/doc/refman/5.1/en/example-auto-increment.html
私が推測する主な理由は、データベースの行が配列ではなく、自動インクリメント値が配列インデックスであるという意味でのインデックスではないためです。主キー ID は任意の値にすることができますが、多くの場合、一意であることは必須であり、それ以外のものであることが保証されているわけではありません (たとえば、行を削除しても番号が付け直されることはありません)。
これは、リンゴとオレンジを比較するようなものです。
それが最初の数字であるため、配列は 0 から始まります。Autoinc フィールドも任意の番号から始まります。その場合は、むしろ 1 にします。