㈠ sqlIte如何設置自動增長的欄位
CREATE
TABLE
salespeople
(
id
INTEGER
PRIMARY
KEY,
first_name
TEXT
NOT
NULL,
last_name
TEXT
NOT
NULL,
commission_rate
REAL
NOT
NULL
);
主鍵如果是INTEGER
,默認就是增長類型,凱鄭拍其他欄位可以通過申明叢敏AUTOINCREMENT
,但是最好不要這樣做,因盯羨為自動增長主要是為主鍵設置的
㈡ Django中Sqlite3自增主鍵歸零的操作方法,大神急救
原則上這個表是不讓你修改友搭模的,也是不能修改的,Django不支持這種操作。
自增主鍵是數據表用來確定一條記錄的唯一方法,你枝早讓它歸零了,那麼以前的記錄怎麼辦?肯定會發生沖突的。如果你不需要以前的數據,並且數據也不重要,那直接刪庫,好緩重新來,主鍵就歸零了(謹慎操作)。
推薦一個Django學習教程,Django高級教程
㈢ SQLite資料庫的id欄位,怎麼設置成從1開始自增
使用自增長欄位為主鍵有不少問題,比如維護或是在大型分布應用中主鍵沖突的解決等。在一些大型分布應用中主鍵一般選用guid,這可以有效的避免主鍵沖突,減少對主鍵維護的工程。當然,對於中小型的應用,自增長欄位的好處更多一些,簡單、快速。
Sqlite中,一個自增長欄位定義為INTEGER PRIMARY KEY AUTOINCREMENT,那麼在插入一個新數據時,只需要將這個欄位的值指定為NULL,即可由引擎自動設定其值,引擎會設定為最大的rowid+1。當然,也可以設置為非NULL的數字來自己指定這個值,但這樣就必須自己小心,不要引起沖突。當這個rowid的值大於所能表達的最大值 9223372036854775807 (3.0及以後版本的rowid最大值)後,rowid的新值會這個最大數之前隨機找一個沒被使用了的值。所以在rowid達到最大值前,rowid的值是嚴格單調增加的。
INTEGER PRIMARY KEY AUTOINCREMENT 自增長欄位的演算法與rowid稍微有些不同。
第一,在達到最大值後,rowid會找已被刪除的欄位對應的rowid作為新值,而自增長欄位則會丟出一個SQLITE_FULL的錯誤。
第二,自增長欄位在增加新值時,是找一個戚此從沒被使用過的rowid作為新值,而rowid則是找最大已存在的rowid+1。這里對應用的影響會比較大,尤其是一些對id值有依賴的元記錄,只適合使用自增長欄位而不能用rowid。
比如,我們設計一個元記錄表:
drop table test;
create table test (
[tkid] integer PRIMARY KEY autoincrement, -- 設置主鍵
[tktype] int default 0,
[tableid] varchar (50),
[createdate] datetime default (datetime('now', 'localtime')) -- 時間
);
第三,使用自增長欄位,引擎會自動產生一個sqlite_sequence表,用於記錄每個表的自增長欄位的已使用的最大值,用戶可以看到,並可以用使用 Update、Delete和Insert操作,但不建議這么使用,這會讓引擎混亂。如果使用rowid,也會有這么一個內部表,用戶可以維護rowid 值,但看不液絕到。
這么看來,如果直接使用rowid來代替自增加欄位,根據兩者的細微的差別,需要注意是否與自己的應用沖突,如果沒有沖突,那麼用rowid會更快一點。
SQLite中創建自增欄位:
簡單的回答:一個聲明為 INTEGER PRIMARY KEY 的欄位將自動增加。
從 SQLite 的 2.3.4 版本開始,如果你將一個表中的一個欄位聲明為 INTEGER PRIMARY KEY,那麼無論你何時向該表的該欄位插入一個 NULL 值,這個 NULL 值將自動被更換為比表中該欄位所有行的最大值大 1 的整數;如果表為空,那麼將被更換為 1。
一個新的API函數 sqlite3_last_insert_rowid() 返回最近的插入操作的整形鍵.
注意這個整型鍵始終比之前插入表中的最後一個鍵大1。新鍵相對於表中的已有鍵來說是唯一的,但它可能與之前從表中刪除的鍵值重疊。要高埋迅始終得到在整個表中唯一的鍵,在INTEGER PRIMARY KEY的聲明之前加關鍵詞AUTOINCREMENT.這樣被選的鍵將總是比表中已存在的最大鍵大1。若可能的最大鍵已存在於表中,INSERT操作將失敗並返回一個SQLITE_FULL錯誤碼.
㈣ sqlite資料庫ID自增長最大是幾位數
#ifdefSQLITE_32BIT_ROWID
#defineMAX_ROWID0x7fffffff
#else
/*Somecompilerscomplain陸凳.
**.Thefollowingmacroseems
**.
*/
#旅正defineMAX_ROWID(i64)((((u64)0x7fffffff)<<32)|(u64)0xffffffff)
#endif
這是sqlite源碼中定義的值早鎮旅,自增id即ROWID,最大值即MAX_ROWID
㈤ 如何在SQLite中創建自增欄位
從 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錯誤碼.
㈥ sqlite_get_table為什麼會自動創建表格
sqlite的機制或者是自動備份功能。
慮到id是自增長的,資料庫中應該有系統表來保存相關信息,用sqliteman打開數據文件發現確實存在這樣一張系統表sqlite_sequence。表中保存了表名和自增長的欄位(一般就是主鍵id)的當前值,測試了下,如果包含自增長欄位的表沒有插入過數據,不會保存在此表裡,只要曾經插入過數據,無論當前是否有數據,該值都會存在。
做Android開發其實經常打開sqlite數據文件,以前也看到過系統表,只是從來沒有研究過,趁此機會看個明白。在sqlite資料庫文件中,一旦你建表,就會在系統目錄(SystemCatalogue)下自動生成2個系統表sqlite_master和sqlite_sequence。sqlite_master保存了所有表的信息,包括type,是table或者index等,name和tbl_name,二者看起來內容一樣。還有一個rootpage,可能是建表順序。sql在類型是table的時候就是建表的sql語句。當你的表中有自增長的欄位時,sqlite_sequence就會保存下表名和該欄位的序列值,當然前提是你已經插入過數據,否則不會保存。
㈦ 為什麼我在sqlite資料庫中插入數據後羅列列中沒有自動增長碼自動增長碼是空的
CREATE TABLE IF NOT EXISTS TAB_USER(
_id integer primary key autoincrement,
name VARCHAR2(30)
);
自動增長,你要設置ID為主鍵模喊,並且指定自動增長autoincrement
測試以下上面旦搜野這個代碼吧,順便給你一個sqlite的客戶端帶密漏寬鑰的
㈧ sqlite資料庫的主鍵id設置為自增長,怎麼知道下一個id是多少
select id from table_name order by id desc limit 1
㈨ SQLite的自增長序列能否刪除記錄後重新增長
不可以的。如果要想從衡侍閉1開始,只能用
【談棗truncate
table
表名】來清除咐裂數據,但用
truncate整個表的數據都會被清除的。