SQLite で auto-increment なフィールドを作成する方法

  PHP のマニュアルの sqlite_last_insert_rowid の項目を見ていたら

Tip: You can create auto-increment fields in SQLite by declaring them as INTEGER PRIMARY KEY in your table schema.

  つまり,SQLite で auto-increment なフィールドを作りたければ,

INTEGER PRIMARY KEY

  を指定してあげればいいらしい.

  このような記述を見つけたのでテストしてみた.

- SQLite 2.x の場合

$ sqlite test.db
SQLite version 2.8.16
Enter ".help" for instructions
sqlite> CREATE TABLE a (a INTEGER PRIMARY KEY, b TEXT);
sqlite> INSERT INTO a VALUES (NULL, 'test');
sqlite> INSERT INTO a VALUES (NULL, 'test2');
sqlite> INSERT INTO a VALUES (NULL, 'test3');
sqlite> SELECT * FROM a;
a           b
----------  ----------
1           test
2           test2
3           test3

  SQLite 2.8.16 ではうまくいった.
  では,INTEGER PRIMARY KEY に NOT NULL を指定するとどうなるか.

sqlite> CREATE TABLE b (a INTEGER NOT NULL PRIMARY KEY, b TEXT);
sqlite> INSERT INTO b VALUES (NULL, 'test');
sqlite> INSERT INTO b VALUES (NULL, 'test2');
sqlite> INSERT INTO b VALUES (NULL, 'test3');
sqlite> SELECT * FROM b;
a           b
----------  ----------
1           test
2           test2
3           test3

sqlite> INSERT INTO b (b) VALUES ('test4');
sqlite> SELECT * FROM b;
a           b
----------  ----------
1           test
2           test2
3           test3
4           test4

  これもうまくいく.

- SQLite 3.x の場合

$ sqlite3 test.db3
SQLite version 3.1.3
Enter ".help" for instructions
sqlite> CREATE TABLE a (a INTEGER PRIMARY KEY, b TEXT);
sqlite> INSERT INTO a VALUES (NULL, 'test');
sqlite> INSERT INTO a VALUES (NULL, 'test2');
sqlite> INSERT INTO a VALUES (NULL, 'test3');
sqlite> SELECT * FROM a;
a           b
----------  ----------
1           test
2           test2
3           test3

  SQLite 3.1.3 の場合も 2.x と同様にうまくいく.
  INTEGER PRIMARY KEY に NOT NULL を指定するとどうなるか.

sqlite> CREATE TABLE b (a INTEGER NOT NULL PRIMARY KEY, b TEXT);
sqlite> INSERT INTO b VALUES (NULL, 'test');
sqlite> INSERT INTO b VALUES (NULL, 'test2');
sqlite> INSERT INTO b VALUES (NULL, 'test3');
sqlite> SELECT * FROM b;
a           b
----------  ----------
1           test
2           test2
3           test3

sqlite> INSERT INTO b (b) VALUES ('test4');
sqlite> SELECT * FROM b;
a           b
----------  ----------
1           test
2           test2
3           test3
4           test4

  こちらもうまくいく.

- まとめ

INTEGER NOT NULL PRIMARY KEY

  でも

INTEGER PRIMARY KEY

  どちらでも OK.

- sqlite_last_insert_rowid
  http://www.php.net/sqlite_last_insert_rowid

- 追記
  2.8.16 の場合を修正.NOT NULL を指定してもうまくいった.

Ajax と PHP を使ったチャット Shoutbox

  http://www.codepost.org/view/96

  これは面白い.
  入室,退室,リロードなどが全部 Ajax で実装されている.
  DB には MySQL を使っている.

- via: phpspot開発日誌
  http://phpspot.org/blog/archives/2006/02/ajaxphp_shoutbo.html

PHP で書かれた Web ベースのカレンダーアプリケーション ExtCalendar 2

  http://sourceforge.net/projects/extcal

  

  インストールも超簡単.但し,ソースを展開するとカレントディレクトリにたくさん展開されるので注意.

% mkdir extcal
% tar -zxvf ../extcal2.0_b2.tar.gz
% chmod 0777 include upload

% mysql -uroot -p
mysql> CREATE DATABASE extcal;
mysql> GRANT ALL PRIVILEGES ON extcal.* TO ユーザ名@localhost IDENTIFIED BY 'パスワード';
mysql> GRANT ALL PRIVILEGES ON extcal.* TO ユーザ名@"%" IDENTIFIED BY 'パスワード';
mysql> FLUSH PRIVILEGES;

  これでブラウザから index.php にアクセスすれば設定画面が出る.
  [Settings] - [Environment Settings] - [Character encoding] を
  Japanese (euc-jp) にすれば,日本語での読み書きができる.

- via: しすろぐ
  http://www.fuji3.info/Hanamogera/PBLOG/article.php?id=631

Flash で開発された MySQL 管理ツール FlashMyAdmin

  http://www.flashmyadmin.org/original/flashmyadmin.org.php

- デモ
  http://www.flashmyadmin.org/flash/mysql/administration/trial/flashmyadmin. ...

  

  イメージや動画のプレビューが出来たりとなかなか面白さげ.

  残念ながら日本語は通らなかった.
  既存のテーブルにある日本語も文字化けしてしまう.

- via: memo.xight.org
  http://memo.xight.org/2006-01-19-18

MySQL 徹底入門 第2版

  4798110256
  http://www.amazon.co.jp/o/ASIN/4798110256/todaysnonsenc-22/ref=nosim/
  遠藤 俊裕 (著), 坂井 恵 (著), 館山 聖司 (著), 鶴長 鎮一, とみた まさひろ, 班石 悦夫, 松信 嘉範
  翔泳社
  ISBN: 4798110256
  2006/01/24
  3,654 円

PHP で MySQL と連携するデータグリッドを実現する PHPGrid

  http://www.kode.de/phpgrid/

  PHPGrid

  上記のようなデータグリッドが簡単に実現できる.
  MySQL と連携しているので DB の編集が簡単.

  動作例はデモを見てみればわかる.

- via: phpspot開発日誌
  http://phpspot.org/blog/archives/2006/01/ajaxdbphpgrid.html

Oracle,MySQL,PostgreSQL の性能比較表

- Comparison of Oracle, MySQL and PostgreSQL DBMS
  http://www-css.fnal.gov/dsg/external/freeware/mysql-vs-pgsql.html

  結構細かい点まで比較してある.わかりやすい資料.

MySQL を利用した ProFTPD のアカウント管理

  http://kikuz0u.x0.com/memo/hiki.cgi?ProFTPD%A1%A1%A1%C1%20MySQL%A4%F2%BB%C ...

  ポイントは configure オプションの

--with-modules=mod_sql:mod_sql_mysql

  なのかな.
  ユーザごとに /etc/passwd を触る必要がないのでいい!

  ProFTPD + MySQL のアカウント管理用のフロントエンドがどこかにありそうな予感.

オープンソースな ER 図モデリングツール DBDesigner

  http://www.fabforce.net/dbdesigner4/

  MySQL,SQLite,Oracle,MSSQL,ODBC 接続に対応している.
  リバースエンジニアリング機能で既存の DB の現状把握にも役に立ちそう.
  ライセンスは GPL.

- DBDesigner4 Manual (日本語)
  http://www.aglabo.com/agl/proevo/software/fabforce/

- 実践的データモデリング入門 DB Magazine Selection [Books]:
  4798103853
  http://www.amazon.co.jp/o/ASIN/4798103853/todaysnonsenc-22/ref=nosim/
  真野 正 (著)
  翔泳社
  ISBN: 4798103853
  2003/03
  2,520 円

- データモデリング基礎講座―データベース設計を楽しもう!DB Magazine Selection [Books]:
  4798101109
  http://www.amazon.co.jp/o/ASIN/4798101109/todaysnonsenc-22/ref=nosim/
  根本 和史 (著)
  翔泳社
  ISBN: 4798101109
  2001/11
  2,310 円

MySQL の状態を分析して修正ポイントやチューニングアドバイスを教えてくれる mMeasure

  http://mysql.timedia.co.jp/modules/weblog/details.php?blog_id=79

- mMeasure
  http://mysql.timedia.co.jp/mmeasure/

  おお,これはなかなかいい感じです.Solaris や FreeBSD でも動くのだろうか?

- via: /home/pochi/ChangeLog
  http://www.pochi.cc/~sasaki/chalow/2005-12-05-3.html