sqlite> copy テーブル名 from 'CSVファイル名' using delimiters ',';
sqlite3 -separator , データベース.db ".import csvファイル名 テーブル名"
CREATE TABLE schedule(date REAL NOT NULL, task TEXT NOT NULL); INSERT INTO schedule( date, task ) VALUES( julianday( 'now' ), 'Meeting' ); SELECT task FROM schedule WHERE date BETWEEN julianday( '2007-04-19' ) AND julianday( '2007-04-20' ); SELECT strftime( '%m-%d %H:%M', date, 'localtime' ) FROM schedule WHERE task='Meeting';
select datetime(time, 'unixepoch', 'localtime') from ticket; select datetime(time, 'unixepoch', 'localtime') from ticket where date(time, 'unixepoch', 'localtime') >= '2007-01-01'; select datetime(time, 'unixepoch', 'localtime') from ticket where date(time, 'unixepoch', 'localtime') BETWEEN '2007-01-01' and '2007-06-01';
select strftime('%Y/%m/%d', project.ordertime, 'unixepoch', 'localtime') from project;
# sqlite database .dump | sqlite3 database.3
# sqlite3 database .dump | sqlite database.2
sqlite データベース名.db sqlite> pragma integrity_check; ok sqlite>
sqlite データベース名.db .dump >backup.sql sqlite データベース名.db < backup.sql
シーケンス表の替わりとして使える。
nullをINSERTすると、自動インクリメントされる。
が、他のデータベースとの移植性が下がるので、注意。
CREATE TABLE foo ( id INTEGER UNSIGNED PRIMARY KEY ) INSERT INTO foo VALUES (NULL)
$aType = array( 'master', 'tables', 'schema', 'schemax', 'schema_x', 'alter', ); echo "<pre>"; foreach($aType as $type){ $data = $db->getListOf($type); if (DB::isError($data)) { continue; } echo "$type => "; var_export($data); echo "\n"; }
結果:
master => array ( 0 => 'table', ) tables => array ( 0 => 'foo', ) schema => array ( 0 => 'CREATE TABLE foo (bar varchar(10))', ) schemax => array ( ) schema_x => array ( )
データベースファイルの情報を得ます。
「size」を見る事で、データベース作成済みかどうかをチェックする等に使えるはず。
print_r($db->getDbFileStats());
結果:
Array ( [0] => 770 [1] => 3113726 [2] => 33206 [3] => 1 [4] => 48 [5] => 48 [6] => -1 [7] => 0 [8] => 1135670667 [9] => 1135670667 [10] => 1135670667 [11] => -1 [12] => -1 [dev] => 770 [ino] => 3113726 [mode] => 33206 [nlink] => 1 [uid] => 48 [gid] => 48 [rdev] => -1 [size] => 0 [atime] => 1135670667 [mtime] => 1135670667 [ctime] => 1135670667 [blksize] => -1 [blocks] => -1 )
SQLiteは通常、SQL発行毎にBEGIN 〜 END を実行するので、処理が遅い場合がある。
大量のINSERT等を高速に行いたい場合は、以下のようにトランザクション内で実行すること。
BEGIN; 大量のINSERT処理... END;
$db->autoCommit(false); $db->query(); // 大量に発行 $db->commit();
dateフィールドに「current_timestamp」を使うと、apacheが「Segmentation fault」で落ちる。
*1
「# pear install sqlite」でインストールすると2.8.xがインストールされるので注意。
よって、datetime()関数を使うと良い。
select datetime('now','localtime')
Apache | 2.0.51 |
PHP | 4.3.11 |
SQLite | 2.8.14 |
# pear install sqlite
# vi /etc/php.d/sqlite.ini --------------------------- ; Enable sqlite extension module extension=sqlite.so --------------------------- +httpdの再起動 # service httpd restart # php -m | grep sqlite --------------------------- sqlite ---------------------------
<?php if ($db = sqlite_open('mysqlitedb', 0666, $sqliteerror)) { sqlite_query($db,'CREATE TABLE foo (bar varchar(10))'); sqlite_query($db,"INSERT INTO foo VALUES ('fnord')"); $result = sqlite_query($db,'select bar from foo'); var_dump(sqlite_fetch_array($result)); } else { die ($sqliteerror); } ?>
<?php /** * SQLiteサンプル2 * * @note * - PEAR DB使用 * - インストール * @code # pear install sqlite # pear install DB * @endcode */ require_once 'DB.php'; $dsn = 'sqlite:///mysqlite.db?mode=0666'; $options = array( 'debug' => 2, 'portability' => DB_PORTABILITY_ALL, ); $db =& DB::connect($dsn, $options); if (DB::isError($db)) { die($db->getMessage()); } $aStats = $db->getDbFileStats(); if($aStats["size"] <= 0){ $result =& $db->query('CREATE TABLE foo (bar varchar(10))'); if (DB::isError($result)) { die ($result->getMessage()); } } $result =& $db->query("INSERT INTO foo VALUES ('fnord')"); if (DB::isError($result)) { die ($result->getMessage()); } $db->setFetchMode(DB_FETCHMODE_ASSOC); $res =& $db->query('select bar from foo'); $row =& $res->fetchRow(); var_dump($row); $db->disconnect(); ?>
http://www.sqlite.org/datatypes.html
BLOB |
BOOLEAN |
CHARACTER |
CLOB |
FLOAT |
INTEGER |
KEY |
NATIONAL |
NUMERIC |
NVARCHAR |
PRIMARY |
TEXT |
TIMESTAMP |
UNIQUE |
VARCHAR |
VARYING |
CREATE TABLE ex2( a VARCHAR(10), b NVARCHAR(15), c TEXT, d INTEGER, e FLOAT, f BOOLEAN, g CLOB, h BLOB, i TIMESTAMP, j NUMERIC(10,5) k VARYING CHARACTER (24), l NATIONAL VARYING CHARACTER(16) );