如何在每个SQLite行中插入唯一的ID?

时间:2012-02-18 14:57:32

标签: sql database sqlite

我有以下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")');

5 个答案:

答案 0 :(得分:35)

您可以将id定义为auto 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 :(得分:16)

这是我使用的语法。

 id INTEGER PRIMARY KEY AUTOINCREMENT,

根本不提供自动增量列的数据

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

甚至更简单

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

答案 2 :(得分:3)

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

答案 3 :(得分:1)

对于INSERT,更好地为相应的自动增量值的问号占位符提供“null”值。

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

答案 4 :(得分:1)

这对我来说很完美

c.execute('INSERT INTO WEBSITES (url) VALUES (?)', [url])