2012-02-18 15 views
20

私は以下の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")'); 

答えて

27

auto increment column

MichaelDornerノートとして
create table entries (id integer primary key autoincrement, data) 

SQLite documentationinteger primary keyが同じことをして、わずかに速いだという。そのタイプの列はrowidの別名です。behaves like an autoincrement columnです。

create table entries (id integer primary key, data) 

この動作は暗黙的であり、経験の浅いSQLite開発者をガードオフにする可能性があります。

+1

お知らせを働いていた。それ通常は必要ありません。 (https://www.sqlite.org/autoinc.html) –

+0

@MichaelDorner:ありがとう、面白い、私は答えを更新しました。 – Andomar

+2

PHPはPDOを使用すると、*が*整数であり、intではないことに注意してください。そうでなければ自動的にidを設定しません。 – 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"); 

、その後:あなたのようにidを定義することができ

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

またはINSERT用

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

さらに簡単にデータを提供しません。疑問符プレースホルダ。

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

これは、AUTOINCREMENTキーワードは余分なCPU、メモリ、ディスク容量、およびディスクI/Oのオーバーヘッドを課し、厳密に必要でない場合は避けるべきである」ことを、私のために完璧に

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