Definir o valor padrão de uma coluna inteira SQLite

116

Estou criando um banco de dados SQLite no android.

db.execSQL("CREATE TABLE " + DATABASE_TABLE + " (" 
    + KEY_ROWID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
    + KEY_NAME + " TEXT NOT NULL, " 
    + KEY_WORKED + " INTEGER, "
    + KEY_NOTE + " INTEGER);");

É possível definir o valor padrão de KEY_NOTE(que é um inteiro) para cada linha criada como 0(zero)? Nesse caso, qual deve ser o código correto.

Renascido
fonte

Respostas:

231

Use a palavra-chave SQLite default

db.execSQL("CREATE TABLE " + DATABASE_TABLE + " (" 
    + KEY_ROWID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
    + KEY_NAME + " TEXT NOT NULL, "
    + KEY_WORKED + " INTEGER, "
    + KEY_NOTE + " INTEGER DEFAULT 0);");

Este link é útil: http://www.sqlite.org/lang_createtable.html

Karakuri
fonte
8

Uma coluna com valor padrão:

CREATE TABLE <TableName>(
...
<ColumnName> <Type> DEFAULT <DefaultValue>
...
)

<DefaultValue> é um espaço reservado para:

  • valor literal
  • ( expressão )

Exemplos:

Count INTEGER DEFAULT 0,
LastSeen TEXT DEFAULT (datetime('now'))
Frogatto
fonte
3

Acontece que estou começando a aprender codificação e precisava de algo semelhante ao que você acabou de pedir no SQLite ( estou usando [SQLiteStudio] (3.1.1) ).

Acontece que você deve definir a ' Restrição ' da coluna como ' Não Nulo ' e, em seguida, inserir a definição desejada usando ' Restrição ' ' Padrão ' ou não funcionará ( não sei se isso é um SQLite ou o requisito do programa ).

Aqui está o código que usei:

CREATE TABLE <MY_TABLE> (
<MY_TABLE_KEY>       INTEGER    UNIQUE
                                PRIMARY KEY,
<MY_TABLE_SERIAL>    TEXT       DEFAULT (<MY_VALUE>) 
                                NOT NULL
<THE_REST_COLUMNS>
);
Nader Belal
fonte
É a mesma lógica usada no MySQL; o padrão de uma coluna anulável já é NULL, então definir um padrão de outra forma implicaria que a coluna não é anulável. Se você especificar um padrão em uma coluna anulável sem declará-lo NOT NULL, você poderá ficar confuso quando os valores padrão NULL forem inseridos.
ChoNuff
1
A instrução UNIQUE não é necessária e já está implícita na instrução PRIMARY KEY.
dani
@dani Eu concordo com você, mas era a única maneira de contornar os erros que SQLiteStudio 3.1.1 estava gerando por falta da condição "Única"
Nader Belal