2012-02-18 106 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]) 
相关问题