2011-12-08 10 views
39

自動インクリメントと私は第二のユーザを削除し、IDが2である第三作成した場合は2AndroidのSQLiteの</p> <p>「INTEGER PRIMARY KEY」</p> <p>がテーブルにid 1を持っているので、私は二人のユーザーを作成したとしましょうと私は現在作成されたID列を持つテーブルと呼ばれるユーザーを持って

、私はAndroidは次の使用可能なIDを選択しているようで、これは3

する必要があり、どのように私は、その多くのようにこれを変更することができますシーケンス番号?

よろしく

+1

を選択しますが、uが主キーとuはこれを必要とするこの取り組んでいるfine.whyが必要ですか? –

答えて

84

それINTEGER PRIMARY KEY AUTOINCREMENT NOT NULLください。ここでthe docsが言うことだ:カラムはその後、タイプINTEGER PRIMARY KEY AUTOINCREMENTを持って

なら... ROWIDは、新しい行のため を選択 が今までその中に存在している最大のROWIDよりも少なくとも1大きいです同じテーブル。

AUTOINCREMENTキーワードによって実装される動作は、微妙にデフォルト動作と異なる です。 AUTOINCREMENTで、 自動的に選択のROWIDを持つ行が同じデータベースに同じテーブルで以前に使用されたことがない いるROWIDを持つことが保証されています。 自動的に生成されたROWIDは単調増加することが保証されます

+1

私は 'PRIMARY KEY'なしで' AUTOINCREMENT'をしたいです。主キーを別の列に割り当てるので、私は '_ID INTEGER AUTOINCREMENT NOT NULL'を使っています。これはエラーです。 – reegan29

+0

@ reegan29 AUTOINCREMENTはINTEGER PRIMARY KEYでのみ使用できます。 AUTOINCREMENTキーワードはROWID選択アルゴリズムの動作を変更するため、WITHOUT ROWID表またはINTEGER PRIMARY KEY以外の表の列ではAUTOINCREMENTは許可されません。WITHOUT ROWIDテーブルまたはINTEGER PRIMARY KEYカラム以外のカラムでAUTOINCREMENTを使用しようとすると、エラーが発生します* [SQLiteオートインクリメント](https://sqlite.org/autoinc.html) – MikeT

9

SQLite AUTOINCREMENTは、テーブル内のフィールドの値を自動インクリメントするために使用されるキーワードです。自動増分する特定の列名を持つ表を作成するときに、AUTOINCREMENTキーワードを使用してフィールド値を自動増分することができます。

キーワードAUTOINCREMENTは、INTEGERフィールドのみで使用できます。 構文:

次のようにAUTOINCREMENTキーワードの基本的な使い方は次のとおりです。

CREATE TABLE table_name(
    column1 INTEGER AUTOINCREMENT, 
    column2 datatype, 
    column3 datatype, 
    ..... 
    columnN datatype, 
); 

例については、以下を参照してください: 次のように作成することがCOMPANYテーブル考えてみましょう:以下を挿入し、今

sqlite> CREATE TABLE TB_COMPANY_INFO(
    ID INTEGER PRIMARY KEY AUTOINCREMENT, 
    NAME   TEXT  NOT NULL, 
    AGE   INT  NOT NULL, 
    ADDRESS  CHAR(50), 
    SALARY   REAL 
); 

をテーブルTB_COMPANY_INFOに記録:

INSERT INTO TB_COMPANY_INFO (NAME,AGE,ADDRESS,SALARY) 
VALUES ('MANOJ KUMAR', 40, 'Meerut,UP,INDIA', 200000.00); 

今記録

SELECT *FROM TB_COMPANY_INFO 
    ID  NAME   AGE  ADDRESS    SALARY 
    1  Manoj Kumar  40  Meerut,UP,INDIA  200000.00 
+0

ありがとう...私自動インクリメントフィールドのために "INTEGER PRIMARY KEY AUTOINCREMENT"が必要でした。 –

+0

シュート、私は間違った場所に 'AUTOINCREMENT'を持っていました。この例をありがとう! – booky99

関連する問題