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?

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


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

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

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.