#author("2023-12-03T06:15:32+00:00","default:hotate","hotate")
#author("2023-12-03T06:15:43+00:00","default:hotate","hotate")
#contents
&tag(SQL);

* 情報 [#z61f60c7]
- [[SQLite入門>http://www.dbonline.jp/sqlite/]]
-- [[テーブルスキーマ(構造)の確認 - テーブルの作成 - SQLite入門>http://www.dbonline.jp/sqlite/table/index2.html]]
 引数を省略すれば全てのテーブルやインデックスのスキーマ情報を表示します

** [[リファレンス]] [#q8771094]
- [[SQLite3まとめ - Qiita>https://qiita.com/ChiakiYamaoka/items/b7c7863688d6f23c0501]]
 SQLiteの起動や終了に必要な基本的なコマンド
 起動コマンド
 sqlite3 データベース名.db
- [[Sqlite3でsqlファイルからクエリを実行する>https://www.usagi1975.com/18jul142356/]]
 シェルなどの外部プログラムから実行する場合は、以下のようにDBファイルに対して、SQLファイルをリダイレクトするような感じで実行する。
 # sqlite3 sample.db < test.sql

** [[コマンド]] [#t3546253]
- [[SQLite3 をコマンドラインで利用する場合に設定しておいた方が良いもの - いろいろ備忘録日記>https://devlights.hatenablog.com/entry/2023/05/08/073000]] ([[2023]]/05/08)
 SQLite3をコマンドラインで利用する場合に最低限以下を設定しておくと少し見やすくなります。
 .headers on
 .mode column
 .nullvalue [NULL]
- [[SQLite3 をコマンドラインで利用する場合に設定しておいた方が良いもの (起動時にパラメータで指定) - いろいろ備忘録日記>https://devlights.hatenablog.com/entry/2023/05/09/073000]]
 実は sqlite3 コマンドを実行する際に同じ設定をパラメータで指定することも出来ます。
 $ sqlite3 my.db -header -column -nullvalue [NULL]

** テーブル [#i5e79197]
- [[SQLite3で型に厳格なSTRICTテーブルを作る | DevelopersIO>https://dev.classmethod.jp/articles/sqlite-static-type-system-with-strict-mode/]] (2023/03/03)
 STRICTテーブルは3.37(2021-11-27リリース)から利用可能


** [[日時]] [#f63714e5]
- [[SQLiteで日付時刻を扱う際のポイント - Qiita>https://qiita.com/TomK/items/132831ab45e2aba822a8]]
 SQLiteは日付時刻をUTCとして保持する。
- [[SQLiteで日時を扱う - Qiita>https://qiita.com/baikichiz/items/7a8398257114f9e666a7]]
 SQLiteにはデータ型としての日時型はありません。
- [[SQLite3 で created_at, updated_at - Qiita>https://qiita.com/kerupani129/items/0372ea29d9375e55bb36]]
 今更な内容ではありますが、分かりやすくまとめたかったのと、よそにあった情報で気になった部分を修正して書きたいと思います。

** [[JSON]] [#f2355a14]
- [[あさはか 備忘録: SQLite3 JSON形式でデータを出力する>https://sfnovicenotes.blogspot.com/2020/11/sqlite3-json.html]]
 sqlite のバージョン3.33.0 から利用可能。

** INSERT [#f9ddce45]
- [[最後に追加されたデータのROWIDを取得(last_insert_rowid関数) | SQLite入門>https://www.dbonline.jp/sqlite/function/index24.html]]
 last_insert_rowid 関数を使うとテーブルに最後に追加されたデータの ROWID を取得することができます。

** upsert (insert or update) [#sa8cc7f4]
- [[SQLiteでMySQLのON DUPLICATE KEY UPDATEみたいなupsertをやりたい - Qiita>https://qiita.com/Hiraku/items/1c64a254e5c1768cca02]]
 REPLACE構文は、UNIQUE制約/主キーのダブりでINSERTが失敗した場合、邪魔になったレコードを削除してから新しくINSERTしようとします。これだと、AUTO INCREMENTなキー列の値が変わってしまいます。
- [[【最短5分】SQLite3でUPSERTを実現する2つの方法 | 駆け出し物語>http://kakedashi-xx.com:25214/index.php/2022/02/28/post-4504/]]
 INSERT OR REPLACE INTO文を用いることで、SQLite3でUPSERTを実現できます。

** オートインクリメント [#qa249b5f]
- [[トラフィックを俯瞰でとらえる、パケットの流れを読みファイル転送を見つける方法(2ページ目) | 日経クロステック(xTECH)>https://xtech.nikkei.com/atcl/nxt/column/18/01834/120800007/?P=2]] (2021/12/16)
 問題回避手法はsqlite_sequenceよりもアルファベットで前に来るダミーのテーブルに、オートインクリメントを設定するというものです。このテーブルは以降使われません。なお、このコードをコメントすると、バックアップの取得時に以下のようなエラーが出ますので、ここに残しておきます。

** [[Markdown]] [#jff82796]
- [[sqlite3にて結果をマークダウンで出力 (.mode markdown) - いろいろ備忘録日記>https://devlights.hatenablog.com/entry/2023/11/21/073000]]
 sqlite3で操作しているときに、出力をマークダウンで出すには以下のようにする。
.mode markdown
 .mode markdown

* ツール [#z254e9dc]
- [[The SQLite Sorcerer>http://afoucal.free.fr/index.php/applications/sqlite-sorcerer/]]
- [[SQLite Database Browser by sqlitebrowser>http://sqlitebrowser.org/]]
 $ brew install sqlitebrowser

** SQLite.NET [#m5c0d707]
+ ダウンロード (x86版とx64版は別々)
-- http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki
+ VisualStudio プロジェクト設定
-- 参照設定にSystem.Data.SQLite.dllを追加する。
-- ビルド完了後にSQLite.Interop.dllをコピーする。
 copy /Y $(ProjectDir)lib\SQLite.Interop.dll $(TargetDir)

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS