web-dev-qa-db-fra.com

Comment insérer un identifiant unique dans chaque ligne SQLite?

J'ai le code SQLite suivant. Comment insérer un identifiant unique générant automatiquement dans chaque ligne?

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

Vous pouvez définir id comme une colonne incrémentation automatique :

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

Comme le note Michael Dorner, la documentation SQLite indique qu'un integer primary key fait la même chose et est légèrement plus rapide. Une colonne de ce type est un alias pour rowid, qui se comporte comme une colonne auto-incrémentée .

create table entries (id integer primary key, data)

Ce comportement est implicite et pourrait surprendre les développeurs SQLite inexpérimentés.

34
Andomar

C'est la syntaxe que j'utilise.

 id INTEGER PRIMARY KEY AUTOINCREMENT,

Il suffit simplement de ne pas fournir de données pour la colonne auto-incrémentée

 tx.executeSql('INSERT INTO ENTRIES (id, data) VALUES (NULL, "First row")');

Ou même plus simple

 tx.executeSql('INSERT INTO ENTRIES (data) VALUES ("First row")');
15
Wim

autoincrement est votre ami copain.

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

et alors:

> SELECT * FROM ENTRIES;
1|First row
2|Second row
2
greut

Cela a parfaitement fonctionné pour moi

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

pour l'INSERT, il est préférable de fournir une valeur "null" pour l'espace réservé au point d'interrogation de la valeur d'auto-incrémentation correspondante.

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