Как вставить уникальный идентификатор в каждую строку SQLite? - PullRequest
25 голосов
/ 18 февраля 2012

У меня есть следующий код SQLite. Как вставить автоматически генерируемый уникальный идентификатор в каждую строку?

    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 ]

36 голосов
/ 18 февраля 2012

Вы можете определить id как столбец автоинкремента :

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

Как отмечает MichaelDorner, в документации SQLite говорится, что integer primary key делает то же самое и немного быстрее. Столбец этого типа является псевдонимом для rowid, который ведет себя как столбец автоинкремента .

create table entries (id integer primary key, data)

Такое поведение неявно и может застать неопытных разработчиков SQLite врасплох.

16 голосов
/ 18 февраля 2012

Это синтаксис, который я использую.

 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")');
3 голосов
/ 18 февраля 2012

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
1 голос
/ 28 июля 2017

Это прекрасно сработало для меня

c.execute('INSERT INTO WEBSITES (url) VALUES (?)', [url])
1 голос
/ 16 июля 2013

для INSERT, лучше предоставить "нулевое" значение для соответствующего заполнителя вопросительного знака соответствующего значения автоинкремента.

 tx.executeSql('INSERT INTO ENTRIES (id, data) VALUES (?, ?)', [null, "First row"]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...