如何在每个SQLite行中插入一个唯一的ID?
问题描述:
我有以下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")');
答
您可以定义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开发人员。
答
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
答
这是我使用的语法。
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")');
答
提供的数据,更好地提供相应的自动增量值的“空”值问号占位符。
tx.executeSql('INSERT INTO ENTRIES (id, data) VALUES (?, ?)', [null, "First row"]);
答
这完全为我工作
c.execute('INSERT INTO WEBSITES (url) VALUES (?)', [url])
通知,即“AUTOINCREMENT关键字强加额外的CPU,内存,磁盘空间和磁盘I/O开销,如果不严格需要应该避免。它通常不需要。“ (https://www.sqlite.org/autoinc.html) – 2015-04-16 09:42:35
@MichaelDorner:谢谢,有趣的是,我已经更新了答案。 – Andomar 2015-04-16 12:00:59
请注意,它*具有*是整数,而不是在PHP中使用PDO,否则它不会自动设置ID。 – starbeamrainbowlabs 2015-08-27 13:18:53