Как вставить уникальный идентификатор в каждую строку 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")');
Ответы
Ответ 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])