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")');
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.
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")');
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
Cela a parfaitement fonctionné pour moi
c.execute('INSERT INTO WEBSITES (url) VALUES (?)', [url])
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"]);