« PHP: CAPTCHA | メイン | PHP HTTP Client, GET ( PHP から HTTP通信 ) »

SQLite : AUTOINCREMENT keyword

あとで読む

With SQLite, if you define a column as INTEGER PRIMARY KEY, it will be an alias of the special column, ROWID. You don't need to calculate the column value any more with the ROWID, SQLite automatically do it if you don't specify the value of the column.

In most cases, it works well, however, after the row which has the max value is deleted, SQLite will reuse the value for the next row you insert. This algorithm would sometimes cause a bit confusion.

If you add AUTOINCREMENT for a column definition, that is, define the column as INTEGER PRIMARY KEY AUTOINCREMENT, you can avoid this confusion. ROWID is expanded to 64-bit integer, and SQLite will calculate a value which is to be larger than the largest ROWID that is ever used. Great, but you use this method only with SQLite3, not with SQLite2...

SQLite Autoincrement


SQLite で、あるカラムを INTEGER PRIMARY KEY と定義すると、これは特別なカラムである ROWID の別名となる。このカラムの値を指定せずに行を追加すると現在の最大値+1で新しい値が計算される。(参考: sqlite で自動インクリメントフィールド (groundwalker.com))

これは多くの場合、有効に動作するが、最大値の行が削除されると、次に追加される行の ROWID の値は削除された行と同一、すなわち、再利用される。これはときおりシステムに若干の混乱を引き起こす可能性がある。

カラムの定義に INTEGER PRIMARY KEY AUTOINCREMENT を使用することで、この若干の混乱も回避することができる。この場合、ROWID は 64-bit に拡張され、計算はこれまで使われたことのある値(削除された行も含めて)の最大値で行われるのである。しかし、SQLite3以降であって、SQLite2では使えない。。。

SQLite Autoincrement

Trackbacks

Trackback URL:
http://groundwalker.com/mt/gwtb.cgi/224

« PHP: CAPTCHA | メイン | PHP HTTP Client, GET ( PHP から HTTP通信 ) »

スポンサー

関連ブログ

あわせて読みたい

関連キーワード

Powered by
Movable Type 3.34

連絡先