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.

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


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

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

É 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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.