首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP SQLite 學習筆記:常見問題與語法整理 (第 1/2 部分)

     編輯:PHP 綜合知識

SQLite 支援的 SQL 指令

SQLite 實作了大部分 SQL-92 標準,常用指令包含:

  • DDL:CREATE TABLE、CREATE INDEX、CREATE VIEW、CREATE TRIGGER、DROP、ALTER TABLE (有限支援)
  • DML:INSERT、UPDATE、DELETE、REPLACE
  • 查詢:SELECT、EXPLAIN、PRAGMA
  • 交易:BEGIN、COMMIT、ROLLBACK、SAVEPOINT
  • 其他:ATTACH/DETACH DATABASE、COPY、ON CONFLICT、VACUUM

常見問題彙整

(1) 如何建立自動遞增欄位?

宣告為 INTEGER PRIMARY KEY 的欄位即具自動遞增特性。插入 NULL 時會自動取得最大值 +1。若需全域唯一且不重複(即使刪除後),加上 AUTOINCREMENT 關鍵字:

CREATE TABLE t1 (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT
);

可用 sqlite3_last_insert_rowid() 取得最後插入的 ID。

(2) SQLite 3 支援哪些資料型別?

核心儲存類別:NULL、INTEGER、REAL、TEXT、BLOB。
但建表時可使用更多型別名稱(如 VARCHAR(n)、DATE、BOOLEAN 等),SQLite 會根據「型別親和性」自動轉換。

(3) 為何允許向 INTEGER 欄位插入字串?

這是特性非 Bug。SQLite 採用「動態型別」與「欄位親和性」:宣告型別僅建議儲存格式,實際可存入任意資料。若字串可轉數字則存數字,否則存原字串。唯一例外:INTEGER PRIMARY KEY 僅接受 64-bit 整數。

(4) 為何 0 和 0.0 不能同時作為主鍵?

數值比較時 0 == 0.0 為真,主鍵需唯一,故視為重複值。

(5) 多程序/執行緒同時存取同一資料庫檔案?

  • 多讀單寫:多進程可同時 SELECT,但同一時間僅一進程可寫入(寫入時鎖定整個檔案)。
  • 鎖機制:依賴作業系統檔案鎖 (fcntl/LockFileEx)。NFS、FAT32 等檔案系統鎖可能不可靠,建議資料庫放在本地可靠檔案系統。
  • 並發效能:嵌入式資料庫典型延遲僅毫秒級;高併發寫入場景建議改用 Client/Server 架構 (PostgreSQL, MySQL)。
  • 忙碌處理:預設回傳 SQLITE_BUSY,可用 sqlite3_busy_timeout() 設定等待超時。

結語

SQLite 以單一檔案、零設定、輕量級特性廣泛用於行動裝置、嵌入式系統與中小型 Web 應用。掌握其型別親和性、鎖機制與交易模型,能有效避開常見坑點。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved