Imposta il valore predefinito di una colonna intera SQLite


116

Sto creando un database SQLite in Android.

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

È possibile impostare il valore predefinito di KEY_NOTE(che è un numero intero) per ogni riga creata come 0(zero)? In tal caso, quale dovrebbe essere il codice corretto.

Risposte:


231

Usa la parola chiave 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);");

Questo collegamento è utile: http://www.sqlite.org/lang_createtable.html


8

Una colonna con il valore predefinito:

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

<DefaultValue> è un segnaposto per:

  • valore letterale
  • ( espressione )

Esempi:

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

3

Succede che sto appena iniziando a imparare il codice e avevo bisogno di qualcosa di simile come hai appena chiesto in SQLite ( sto usando [SQLiteStudio] (3.1.1) ).

Succede che devi definire ' Constraint ' della colonna come ' Not Null ' quindi inserendo la definizione desiderata usando ' Default ' ' Constraint ' o non funzionerà ( non so se questo è un SQLite o il requisito del programma ).

Ecco il codice che ho usato:

CREATE TABLE <MY_TABLE> (
<MY_TABLE_KEY>       INTEGER    UNIQUE
                                PRIMARY KEY,
<MY_TABLE_SERIAL>    TEXT       DEFAULT (<MY_VALUE>) 
                                NOT NULL
<THE_REST_COLUMNS>
);

È la stessa logica utilizzata in MySQL; il valore predefinito di una colonna nullable è già NULL, quindi impostare un valore predefinito altrimenti implicherebbe che la colonna non sia annullabile. Se si specifica un valore predefinito su una colonna nullable senza dichiararlo NOT NULL, potrebbe confondere l'utente quando vengono inseriti valori NULL predefiniti.
ChoNuff

1
L'istruzione UNIQUE non è necessaria ed è già implicita nell'istruzione PRIMARY KEY.
dani

@dani Sono d'accordo con te, ma era l'unico modo per aggirare gli errori che SQLiteStudio 3.1.1 stava generando per mancanza della condizione "Unique"
Nader Belal
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.