Подтвердить что ты не робот

Как вставить уникальный идентификатор в каждую строку SQLite?

У меня есть следующий код 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")');
4b9b3361

Ответ 1

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

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

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

create table entries (id integer primary key, data)

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

Ответ 2

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

 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

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

Ответ 4

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

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

Ответ 5

Это отлично сработало для меня

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