1. 如何建立自增欄位?
2. SQLite 支援哪些資料類型?
3. 為什麼能向 SQLite 資料庫的整型欄位中插入字串?
4. 為什麼 SQLite 認為運算式 '0'=='00' 為真?
5. 為什麼 SQLite 不允許在同一張表裡使用 '0' 和 '0.0' 作為兩個不同的行的主鍵?
6. 為什麼不能在 Linux box 中讀取在 SparcStation 中建立的 SQLite 資料庫?
7. 多個應用程式或者同一個應用程式的多個常式能同時存取同一個資料庫檔案嗎?
8. SQLite是安全執行緒的嗎?
9. 如何列出一個 SQLite 資料庫中的所有的表/索引?
10. SQLite資料庫是否有已知的大小限制?
11. 在 SQLite 中 VARCHAR 的最大長度是多少?
12. SQLite 是否支援 BLOB 類型?
13. 如何從一個已存在的 SQLite 資料表中添加/刪除欄位?
14. 我刪除了很多資料但是資料庫檔案並沒有減小,是不是 Bug?
15. 是否能將 SQLite 用於商業用途而不用交著作權費用?
16. 我如何使用含有單引號(')的字串?
17. SQLITE_SCHEMA 錯誤代表什嗎?
18. 為什麼ROUND(9.95,1) 返回 9.9 而不是 10.0? 難道9.95 不該向上進位嗎?
(1) 如何建立自增欄位?
簡單的回答:一個聲明為 INTEGER PRIMARY KEY 的欄位將自動增加。
這裡是詳細的答案: 從 SQLite 的 2.3.4 版本開始,如果你將一個表中的一個欄位聲明為 INTEGER PRIMARY KEY,那麼無論你何時向該表的該欄位插入一個 NULL 值,這個 NULL 值將自動被更換為比表中該欄位所有行的最大值大 1 的整數;如果表為空白,那麼將被更換為 1。比如,假設你有這樣的一張資料表:
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。新鍵相對於表中的已有鍵來說是唯一的, 但它可能與之前從表中刪除的索引值重疊。要始終得到在整個表中唯一的鍵,在INTEGER PRIMARY KEY的聲明之前加關鍵詞AUTOINCREMENT.這樣被選的鍵將總是比表中已存在的最大鍵大1。若可能的 最大鍵已存在於表中,INSERT操作將失敗並返回一個SQLITE_FULL錯誤碼.
(2) SQLite 支援哪些資料類型?
參見 http://www.sqlite.org/datatype3.html.
(3) 為什麼能向 SQLite 資料庫的整型欄位中插入字串?
這是一個功能,不是一個 bug。你可以在任何欄位中放任何資訊,而不用管欄位聲明為什麼類型。 你可以往整型欄位中插入任意長度的字串,或者往布爾欄位中插入浮點數,或者往字元欄位中 插入日期。在 CREATE TABLE 命令中你指定給這個欄位的資料類型不會限制插入這個欄位的資料。 所有的欄位可以插入任意長度的字串。但對於 INTEGER PRIMARY KEY 欄位例外。這種欄位只能 存放一個64位的整數,否則會出錯。
但SQLite會預設你希望使用聲明的欄位類型。所以,比如你希望在一個聲明為INTEGER的欄位 中插入一個字串,SQLite會試圖將其轉換為一個整數。如果轉換成功,那麼整數將被插入,否 則插入字串,這種特性有時被稱作type or column affinity.