sqlite | id generator
他のデータは扱わず、ユーザーIDだけ管理するサービスは、sqliteのautoincrementを利用してID生成してみる。
sqlite使ったことが無いので、適当。。。
http://www.sqlite.org/sqlite.html
$ sqlite3 filename
これでデータベースできるみたい。
$ sqlite3 data/sqlite/def SQLite version 3.3.6 Enter ".help" for instructions sqlite> .databases seq name file --- --------------- ---------------------------------------------------------- 0 main /home/opt/home/socialic.tarot/data/sqlite/def
* create table
sqlite> create table users( ...> id integer primary key, ...> authid varchar(255) not null unique, ...> mail varchar(255) unique, ...> passhash varchar(32), ...> created_at datetime default current_timestamp, ...> updated_at datetime default current_timestamp );
on updateが使えないので、trigger作成
* trigger
sqlite> create trigger update_updated_at AFTER UPDATE ON users ...> BEGIN ...> update users set updated_at=CURRENT_TIMESTAMP where id=old.id; ...> END;
sqlite> insert into users(id, authid) values(null,'test001'); sqlite> insert into users(id, authid) values(null,'test002'); sqlite> insert into users(id, authid) values(null,'test001'); SQL error: column authid is not unique sqlite> update users set mail='mail' where id=1; sqlite> select * from users; 1|test001|mail||2012-01-11 04:28:47|2012-01-11 04:29:37 2|test002|||2012-01-11 04:28:49|2012-01-11 04:28:49
・idは自動で増えました。
・uniqueもOK
・updated_atも更新されています!
OKで、後は簡単なスクリプトで、insertして、select id するだけです。
最後にinsertしたidを取得
sqlite> select * from users; 1|test001|mail||2012-01-11 04:28:47|2012-01-11 04:29:37 2|test002|||2012-01-11 04:28:49|2012-01-11 04:28:49 sqlite> select last_insert_rowid() ; 0 sqlite> insert into users( id, authid ) values(null,'test3'); sqlite> select last_insert_rowid() ; 3
同じコネクション内でinsertした値が対象となります。
ので、最初の select は 0 です。
- Prev 仙臺たんや 利久 東京駅店
- Next sqlite backup .dump
- Prev type | sqlite
- Next sqlite backup .dump