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