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

sev*_*ens 26 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")');
Run Code Online (Sandbox Code Playgroud)

And*_*mar 37

您可以定义id自动增量列:

create table entries (id integer primary key autoincrement, data)
Run Code Online (Sandbox Code Playgroud)

正如MichaelDorner指出的那样,SQLite文档说一个integer primary key做同样的事情并且稍快一些.该类型的列是别名rowid,其行为类似于自动增量列.

create table entries (id integer primary key, data)
Run Code Online (Sandbox Code Playgroud)

这种行为是隐含的,可能会让缺乏经验的SQLite开发人员措手不及.

  • 请注意,在PHP中,**具有*为整数而不是"int",否则它不会自动设置id. (4认同)
  • 请注意,"AUTOINCREMENT关键字会产生额外的CPU,内存,磁盘空间和磁盘I/O开销,如果不是非常严格需要,应该避免使用.通常不需要." (https://www.sqlite.org/autoinc.html) (3认同)

小智 17

这是我使用的语法.

 id INTEGER PRIMARY KEY AUTOINCREMENT,
Run Code Online (Sandbox Code Playgroud)

只是不提供自动增量列的数据

 tx.executeSql('INSERT INTO ENTRIES (id, data) VALUES (NULL, "First row")');
Run Code Online (Sandbox Code Playgroud)

甚至更简单

 tx.executeSql('INSERT INTO ENTRIES (data) VALUES ("First row")');
Run Code Online (Sandbox Code Playgroud)