web-dev-qa-db-ja.com

各SQLite行に一意のIDを挿入する方法は?

次の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")');
25
sevens

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開発者を油断する可能性があります。

36
Andomar

これは私が使用する構文です。

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

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
3
greut

これは私にとって完璧に働いた

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

iNSERTの場合、対応する自動インクリメント値の疑問符プレースホルダーに「null」値をより適切に提供します。

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