Establecer el valor predeterminado de una columna de números enteros SQLite

116

Estoy creando una base de datos SQLite en Android.

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

¿Es posible establecer el valor predeterminado de KEY_NOTE(que es un número entero) para cada fila creada para que sea 0(cero)? Si es así, ¿cuál debería ser el código correcto?

Nacido de nuevo
fuente

Respuestas:

231

Utilice la palabra clave 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 enlace es útil: http://www.sqlite.org/lang_createtable.html

Karakuri
fuente
8

Una columna con valor predeterminado:

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

<DefaultValue> es un marcador de posición para:

  • valor literal
  • ( expresión )

Ejemplos:

Count INTEGER DEFAULT 0,
LastSeen TEXT DEFAULT (datetime('now'))
frogatto
fuente
3

Sucede que estoy empezando a aprender a codificar y necesitaba algo similar a lo que acaba de pedir en SQLite ( estoy usando [SQLiteStudio] (3.1.1) ).

Sucede que debe definir la ' Restricción ' de la columna como ' No nulo ' y luego ingresar la definición deseada usando ' Restricción ' predeterminada 'o no funcionará ( no sé si esto es un SQLite o el requisito del programa ).

Aquí está el código que utilicé:

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
fuente
Es la misma lógica que se usa en MySQL; el valor predeterminado de una columna que admite valores NULL ya es NULL, por lo que establecer un valor predeterminado de lo contrario implicaría que la columna no admite valores NULL. Si especifica un valor predeterminado en una columna que acepta valores NULL sin declararlo NOT NULL, puede confundirse cuando se insertan valores NULL predeterminados.
ChoNuff
1
La instrucción UNIQUE no es necesaria y ya está implícita en la instrucción PRIMARY KEY.
dani
@dani Estoy de acuerdo con usted, pero era la única forma de evitar los errores que SQLiteStudio 3.1.1 estaba generando por falta de la condición "Única"
Nader Belal