SQLiteチュートリアル(V): データベースとトランザクション
2022-01-19 07:26:51
I. データベースのアタッチメント
ATTACH DATABASE文は、現在の接続に別のデータベース・ファイルを追加します。ファイル名が ":memory:" であれば、メモリー データベースとして扱うことができ、メモリー データベースはディスク ファイルに永続化することができません。Attachedデータベースのテーブルを操作する場合は、dbname.table_nameのように、テーブル名の前にデータベース名を付ける必要があります。最後に、トランザクションに複数のAttachedデータベースの操作が含まれている場合でも、トランザクションはアトミックであることに注意する必要があります。以下の例を参照してください。
コピーコード
コードは以下の通りです。
sqlite> CREATE TABLE testtable (first_col integer);
sqlite> INSERT INTO testtable VALUES(1);
sqlite> .backup 'D:/mydb.db' -- Back up the primary database in the current connection to the specified file.
sqlite> .exit
-- Relogin the sqlite command line tool at.
sqlite> CREATE TABLE testtable (first_col integer);
sqlite> INSERT INTO testtable VALUES(2);
sqlite> INSERT INTO testtable VALUES(1);
sqlite> ATTACH DATABASE 'D:/mydb.db' AS mydb;
sqlite> .header on -- Query results output field names as headers.
sqlite> .mode column -- Display each column separately.
sqlite> SELECT t1.first_col FROM testtable t1, mydb.testtable t2 WHERE t.first_col = t2.first_col;
first_col
----------
1
II. データベースを切り離す。
現在の接続で指定されたデータベースをアンインストールします。mainデータベースとtempデータベースはアンインストールできないので注意してください。次の例を参照してください。
コピーコード
コードは以下の通りです。
-- This example hosts the result of the above example, i.e. the mydb database has been attached to the current connection.
sqlite> DETACH DATABASE mydb;
sqlite> SELECT t1.first_col FROM testtable t1, mydb.testtable t2 WHERE t.first_col = t2.first_col;
Error: no such table: mydb.testtable
III. トランザクション
SQLite では、現在表示されている SQL コマンド (SELECT 以外) にトランザクションが指定されていない場合、SQLite は自動的にその操作に暗黙のトランザクションを追加し、その操作の原子性と一貫性を保証します。もちろん、SQLite は表示されるトランザクションもサポートしています。これは、ほとんどのリレーショナルデータベースと比較して、基本的に同じ構文を持っています。次の例を見てください。
コピーコード
コードは以下の通りです。
sqlite> BEGIN TRANSACTION;
sqlite> INSERT INTO testtable VALUES(1);
sqlite> INSERT INTO testtable VALUES(2);
sqlite> COMMIT TRANSACTION; -- shows that the transaction was committed and the data in the data table was changed.
sqlite> SELECT COUNT(*) FROM testtable;
COUNT(*)
----------
2
sqlite> BEGIN TRANSACTION;
sqlite> INSERT INTO testtable VALUES(1);
sqlite> ROLLBACK TRANSACTION; -- shows that the transaction was rolled back with no changes to the data in the data table.
sqlite> SELECT COUNT(*) FROM testtable;
COUNT(*)
----------
2
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
よく使われるsQliteステートメントとsQliteデベロッパーの使用・登録について
-
SQLiteの文字列比較における大文字小文字の問題の解決法
-
SQLiteのWAL機構を詳しく紹介
-
SQLITE3データベースを初めて知る
-
SQLite3における日付と時刻の関数のまとめ
-
SQLiteインメモリデータベース学習マニュアル
-
SQLiteデータベースの共通文とMACでのSQLite用可視化ツール「MeasSQLlite」の利用について
-
Sqliteデータベースの最大挿入データ数は500個です。
-
SQLiteチュートリアル(VIII)。コマンドラインツールの紹介
-
SQLiteチュートリアル(IV)。組み込み関数