学ぶまで! 学ぶ前に情報を見つけてください
SQLite SQL
データベースをアタッチ
トランザクションを開始
コメント
トランザクションをコミット
コピー
インデックスを作成
テーブルを作成
トリガーを作成
ビューを作成
削除
デタッチデータベース
インデックスのドロップ
テーブルのドロップ
トリガー
DROP VIEW
END TRANSACTION
EXPLAIN
expression
INSERT
ON CONFLICT句
PRAGMA
REPLACE
ROLLBACK TRANSACTION
SELECT
UPDATE
sqlite FAQ
(1) 自動インクリメントフィールドを作成するにはどうすればよいですか?
短い答え: INTEGER PRIMARY として宣言しますKEY 列は自動的に拡張されます。
より長い答え: テーブルの列を INTEGER PRIMARY KEY として宣言した場合、その列に NULL 値を挿入するたびに、NULL はテーブルの最大値より 1 大きい整数に自動的に変換されます。空の場合は 1 になります。 (主キーの最大値が 9223372036854775807 の場合、キー値は未使用のランダムな数値になります。) たとえば、次のようなテーブルがあります。
CREATE TABLE t1(
a INTEGER PRIMARY KEY,
b INTEGER
);上記のテーブルでは、次のステートメント
INSERT INTO t1 VALUES(NULL,123);
は論理的に次と同等です:
INSERT INTO t1 VALUES((SELECT max(a) FROM t1)+1,123); という新しい API があります。 sqlite3_last_insert_rowid () を実行すると、最後に挿入された整数値が返されます。
この整数は、挿入前のテーブル内のその列の最大値より 1 大きいことに注意してください。このキー値は現在のテーブル内で一意です。ただし、テーブルから削除された値と重複する可能性があります。テーブルのライフサイクル全体を通じて一意のキー値を作成するには、AUTOINCREMENT ステートメントを INTEGER PRIMARY KEY に追加する必要があります。その後、新しいキー値は、テーブル内にこれまでに存在した最大値より 1 大きくなります。可能な最大の整数値がデータ テーブルに存在する場合、INSERT は SQLITE_FULL エラー コードで失敗します。
------------------------------------------------- -------------------------------
(2)SQLite3 はどのようなデータ型をサポートしていますか?
NULL
INTEGER
REAL
TEXT
BLOB
しかし実際には、sqlite3 は次のデータ型も受け入れます:
smallint 16 ビット整数。
interger 32 ビット整数。
decmal(p,s) p の正確な値とサイズ s の 10 進整数。正確な値 p は合計桁数 (桁数) を指し、s は小数点以下の桁数を指します。指定しない場合、システムは p=5 を設定します。
float 32 ビット実数。
double 64 ビット実数。
char(n) n 長さの文字列。n は 254 を超えることはできません。
varchar(n) 可変長の文字列で、最大長は n です。n は 4000 を超えることはできません。
graphic(n) は char(n) と同じですが、その単位は全角 2 文字であり、n は 127 を超えることはできません。この形式は、漢字など、2 文字の長さのフォントをサポートするためのものです。
vargraphic(n) 可変長の 2 文字の文字列。n の最大長は 2000 を超えることはできません。
日付には年、月、日が含まれます。
時間には、時間、分、秒が含まれます。
タイムスタンプには、年、月、日、時、分、秒、1000分の1秒が含まれます。
http://www.sqlite.org/datatype3.htmlを参照してください。
--------------------------------- --------------------------------------------------
(3 )SQLite では、整数フィールドに文字列を挿入できます。
これは機能であり、バグではありません。 SQLite はデータ型の制約を強制しません。任意のデータを任意の列に挿入できます。任意の長さの文字列を整数列に挿入したり、浮動小数点数をブール列に挿入したり、日付値を文字列に挿入したりできます。 CREATE TABLE で指定されたデータ型は、列へのデータの挿入を制限しません。どの列も任意の長さの文字列を受け入れることができます (ただし、INTEGER PRIMARY KEY とマークされた列には 64 ビット整数のみを格納できるという 1 つのケースを除きます。そのような列に整数以外のデータを挿入すると、エラーが発生します。
ただし、SQLite は宣言された文字列を使用します)たとえば、整数列に文字列を挿入する場合、SQLite は文字列を整数に変換しようとします (変換できる場合は整数が挿入されます)。このプロパティは、タイプまたは列のアフィニティと呼ばれることもあります
----------------- ------------------ -------------------------------- ------------------------
(4) なぜSQLite では、同じテーブル内の 2 つの異なる行で主キーとして 0 と 0.0 を使用することはできません。主キーは数値型である必要があります。主キーを TEXT 型に変更すると機能しません。
各行には一意の主キーが必要です。数値列の場合、整数として比較すると等しいため、SQLite は '0' と '0.0' を同じものとみなします (前の質問を参照)。したがって、この値は一意ではありません。
------------------------------------------------- -----------------------------
(5) 複数のアプリケーションまたはアプリケーションの複数のインスタンスに同時にアクセス可能 同じデータベースファイル?
複数のプロセスが同時に同じデータベースを開くことができます。複数のプロセスが同時に SELECT 操作を実行できますが、データベースに変更を加えられるプロセスは一度に 1 つだけです。
SQLite は読み取りおよび書き込みロックを使用してデータベースへのアクセスを制御します。 (読み取りおよび書き込みロックをサポートしていない Win95/98/ME などのシステムでは、代わりに確率的シミュレーションが使用されます。) ただし、使用するときは注意してください。データベース ファイルが NFS ファイル システムに保存されている場合、このロック メカニズムは、正常に動作できません。これは、fcntl() ファイル ロックが多くの NFS で正しく実装されていないためです。複数のプロセスが同時にデータベースにアクセスする可能性がある場合は、データベース ファイルを NFS に配置しないようにする必要があります。 Windows では、Microsoft のドキュメントに次のように記載されています。 share.exe デーモンを実行せずに FAT ファイル システムを使用すると、ロックが正しく機能しない可能性があります。 Windows の経験が豊富な人々は、次のように言いました。ネットワーク ファイルの場合、ファイル ロックの実装には多くのバグがあり、信頼性が低いです。彼らの言うことが正しければ、2 台以上の Windows マシン間でデータベースを共有すると、望ましくない問題が発生する可能性があります。
SQLite ほど同時実行性を処理できる組み込み SQL データベース エンジンは他にないことを認識しています。 SQLite を使用すると、複数のプロセスが同時にデータベースを開き、同時にデータベースを読み取ることができます。プロセスが書き込みを行う場合、更新プロセス中にデータベース ファイルをロックする必要があります。しかし、それは通常、わずか数ミリ秒です。他のプロセスは、書き込みプロセスが作業を完了するのを待つだけで済みます。通常、他の組み込み SQL データベース エンジンでは、一度に 1 つのプロセスのみがデータベースに接続できます。
ただし、クライアント/サーバー データベース エンジン (PostgreSQL、MySQL、Oracle など) は通常、より高いレベルの同時実行性をサポートし、複数のプロセスが同じデータベースに同時に書き込むことができます。このメカニズムは、データベースへのアクセスを制御および調整する単一のサーバー プロセスが常に存在するため、クライアント/サーバー構造のデータベースで可能です。アプリケーションで多くの同時実行性が必要な場合は、クライアント/サーバー データベースの使用を検討する必要があります。しかし、経験によれば、多くのアプリケーションでは、設計者が想像していたよりもはるかに少ない同時実行性が必要になることがよくあります。
SQLite が別のプロセスによってロックされたファイルにアクセスしようとすると、デフォルトの動作は SQLITE_BUSY を返します。この動作は、sqlite3_busy_handler() または sqlite3_busy_timeout() API 関数を使用して C コードで調整できます。
------------------------------------------------- ------------------------
現在のページ 1/2 12次のページ
上記は、SQLite データベースのインストールに関する php SQLite の学習ノートと FAQ 分析ページ 1/2 を紹介しています。これには、SQLite データベースのインストールの内容も含まれており、PHP チュートリアルに興味のある友人に役立つことを願っています。