SqliteのFAQ学習

2409 ワード

(7) Can multiple applications or multiple instances of the same application access a single database file at the same time?
ここでは、sqliteは複数のアプリケーションが同時に1つのデータベースファイルを操作することを許可するが、fcntl関数によって読み書きロックを制御するため、他のC/Sモードデータベースのように(mysqlのように)、同時に読むことも同時に書くこともでき、sqliteは同じ時刻に読むことしか許可されず、同じ時刻に書くとSQLITE_に戻るBUSY.また、fcntl関数はNFSファイルシステムでは常に正常に実行できないため、NFSファイルシステムでsqliteを使用しないでください.
(8) Is SQLite threadsafe?
ここで、sqliteはマルチスレッドが同一のデータベースを開くことを許可し、データ情報を共有するが、そのスレッドのセキュリティはユーザーが保証する必要があり、一方でlinuxシステムにコンパイルパラメータTHREADSCAFEを追加する必要がある一方、sqliteデータベースが開いたポインタは異なるスレッド間で伝達できない.
Sqliteはスレッドが安全であり、通常、この機能を有効にするためには、Sqliteはコンパイル時にTHREADSCAFEマクロを1とする必要がある.デフォルトの場合、windowsのバイナリライブラリファイルはTHREADAFEモードでコンパイルされていますが、linuxはそうではありません.Threadsafeでは、前の章で2つ以上のスレッドが同じSqliteデータベースを同時に開くことができ、sqlite 3_をそれぞれ使用することができます.Open関数が返すデータベースハンドルですが、複数のスレッドで1つのデータベースハンドルを共有すると非常に安全ではありません.1つのデータベースハンドルは1つのスレッドでしか使用できません.1つのスレッドでデータベースを開いて、戻ってきたデータベースハンドルを別のスレッドに渡して使用することはできません.これは、Readhat 9のような多くのスレッド実装で、1つのスレッドがfcntl()関数を使用してロックを作成した場合、他のスレッドで破棄または変更できないためです.Sqliteはfcntlという関数を頻繁に使用してロックを制御するため、異なるスレッドでデータベースハンドルを渡すと、ますます多くの問題をもたらす可能性があります.fcntlの代わりにロックを実装する他の方法はたくさんあるかもしれませんが、比較的複雑でテストしにくいため、Sqliteは現在、同じデータベースハンドルを複数のスレッドで共有することを許可していません.Unixシステムでは、forkが生成したプロセスでsqliteデータベースを開くことはできません.これは未知の問題をもたらす可能性があります.
(9) How do I list all tables/indices contained in an SQLite database
sqliteで使用できます.tableコマンドは、データベース内のすべてのテーブルを表示します.schemaコマンドは、データベース内のテーブルの詳細構造を表示します.各データベースに対してシステムテーブルSQLITE_があります.MASTER、構造は以下の通りです.
CREATE
TABLE
sqlite_master ( type
TEXT
,
//
tableまたはindexは、テーブルかインデックスかを示す.name
TEXT
,
//
テーブルまたはインデックスの名前.tbl_name
TEXT
,
//
インデックスの場合、このフィールドはインデックスに対応するテーブル名を示す.rootpage
INTEGER
, sql
TEXT
//
テーブルまたはインデックス作成時のsql文を格納します.);
 
 
他のテンポラリ・テーブルは、同じ構造のSQLITE_に格納されます.TEMP_MASTER表中
 
(11) What is the maximum size of a VARCHAR in SQLite
 
sqliteのvarcharタイプは長さに制限がない.
 
(14) I deleted a lot of data but the database file did not get any smaller. Is this a bug?
 
データベースからの記録を削除する場合、データファイルは小さくなることなく、この部分で使用する空間を記録し、次回の挿入操作時に利用する.もちろんご利用いただけます
VACUUM
コマンドは、データベースに空きスペースを解放するが、約0.5 S/Mの一定時間を消費する.
 
(16) How do I use a string literal that contains an embedded single-quote (') character?
 
2つの'を用いてエスケープすればよい.