2012-02-18 2 views
20

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

ответ

27

Вы можете определить id как auto increment column:

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

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

create table entries (id integer primary key, data) 

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

+1

Обратите внимание, что «AUTOINCREMENT ключевое слово вводит дополнительный процессор, память, дисковое пространство, и диск над головой I/O и его следует избегать, если не строго необходимо. Это обычно не требуется ». (https://www.sqlite.org/autoinc.html) –

+0

@MichaelDorner: Спасибо, интересно, я обновил ответ. – Andomar

+2

Обратите внимание, что он * имеет * значение 'integer', а не' int' в PHP с PDO, иначе он не будет автоматически устанавливать идентификатор. – starbeamrainbowlabs

2

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 
14

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

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

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

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

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

c.execute('INSERT INTO WEBSITES (url) VALUES (?)', [url]) 
Смежные вопросы