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

mbskvtky  于 2023-05-07  发布在  SQLite
关注(0)|答案(5)|浏览(265)

下面的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")');
q3qa4bjr

q3qa4bjr1#

您可以将id定义为auto increment column

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

正如MichaelDorner所指出的,SQLite documentationinteger primary key做的几乎是同样的事情,而且稍微快一点。该类型的列是ROWID的别名,其行为类似于自动递增列,不同之处在于,如果没有AUTOINCREMENT,则可以重用行的ID。换句话说,AUTOINCREMENT的目的是防止重用以前删除的行中的ROWID。

create table entries (id integer primary key, data)

这种行为是隐式的,可能会让没有经验的SQLite开发人员措手不及。

lzfw57am

lzfw57am2#

这是我使用的语法。

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")');
uelo1irk

uelo1irk3#

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
5vf7fwbs

5vf7fwbs4#

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

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

p8h8hvxi5#

这对我来说非常有效

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

相关问题