2012-02-18 98 views
20

我有以下SQLite代碼。如何在每行中插入自動生成的唯一ID?如何在每個SQLite行中插入一個唯一的ID?

tx.executeSql('DROP TABLE IF EXISTS ENTRIES'); 
    tx.executeSql('CREATE TABLE IF NOT EXISTS ENTRIES (id unique, data)'); 

    tx.executeSql('INSERT INTO ENTRIES (id, data) VALUES (1, "First row")'); 
    tx.executeSql('INSERT INTO ENTRIES (id, data) VALUES (2, "Second row")'); 

回答

27

您可以定義idauto increment column

create table entries (id integer primary key autoincrement, data) 

由於MichaelDorner便籤,SQLite documentation說,一個integer primary key做同樣的事情,是稍快。該類型的列是rowid的別名,其爲behaves like an autoincrement column

create table entries (id integer primary key, data) 

這種行爲是隱含的,可以抓住沒有經驗的SQLite開發人員。

+1

通知,即「AUTOINCREMENT關鍵字強加額外的CPU,內存,磁盤空間和磁盤I/O開銷,如果不嚴格需要應該避免。它通常不需要。「 (https://www.sqlite.org/autoinc.html) – 2015-04-16 09:42:35

+0

@MichaelDorner:謝謝,有趣的是,我已經更新了答案。 – Andomar 2015-04-16 12:00:59

+2

請注意,它*具有*是整數,而不是在PHP中使用PDO,否則它不會自動設置ID。 – starbeamrainbowlabs 2015-08-27 13:18:53

2

autoincrement是你的朋友哥們。

CREATE TABLE IF NOT EXISTS ENTRIES (id integer primary key autoincrement, data); 
INSERT INTO ENTRIES (data) VALUES ("First row"); 
INSERT INTO ENTRIES (data) VALUES ("Second row"); 

然後:

> SELECT * FROM ENTRIES; 
1|First row 
2|Second row 
14

這是我使用的語法。

id INTEGER PRIMARY KEY AUTOINCREMENT, 

根本就沒有爲自動增量列

tx.executeSql('INSERT INTO ENTRIES (id, data) VALUES (NULL, "First row")'); 

甚至爲INSERT簡單

tx.executeSql('INSERT INTO ENTRIES (data) VALUES ("First row")'); 
0

提供的數據,更好地提供相應的自動增量值的「空」值問號佔位符。

tx.executeSql('INSERT INTO ENTRIES (id, data) VALUES (?, ?)', [null, "First row"]); 
0

這完全爲我工作

c.execute('INSERT INTO WEBSITES (url) VALUES (?)', [url]) 
相關問題