次のSQLiteコードがあります。自動生成の一意のIDを各行に挿入するにはどうすればよいですか?
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")');
id
を 自動インクリメント列 として定義できます:
create table entries (id integer primary key autoincrement, data)
MichaelDornerが指摘しているように、 SQLiteのドキュメント はinteger primary key
は同じことを行い、わずかに高速です。そのタイプの列はrowid
のエイリアスです。これは 自動インクリメント列のように動作します です。
create table entries (id integer primary key, data)
この動作は暗黙的であり、経験の浅いSQLite開発者を油断する可能性があります。
これは私が使用する構文です。
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")');
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
これは私にとって完璧に働いた
c.execute('INSERT INTO WEBSITES (url) VALUES (?)', [url])
iNSERTの場合、対応する自動インクリメント値の疑問符プレースホルダーに「null」値をより適切に提供します。
tx.executeSql('INSERT INTO ENTRIES (id, data) VALUES (?, ?)', [null, "First row"]);