Définir la valeur par défaut d'une colonne d'entiers SQLite

116

Je crée une base de données SQLite sous Android.

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

Est-il possible de définir la valeur par défaut de KEY_NOTE(qui est un entier) pour chaque ligne créée à 0(zéro)? Si tel est le cas, quel devrait être le code correct.

Né de nouveau
la source

Réponses:

231

Utilisez le mot clé 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);");

Ce lien est utile: http://www.sqlite.org/lang_createtable.html

Karakuri
la source
8

Une colonne avec la valeur par défaut:

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

<DefaultValue> est un espace réservé pour un:

  • valeur littérale
  • ( expression )

Exemples:

Count INTEGER DEFAULT 0,
LastSeen TEXT DEFAULT (datetime('now'))
grenouille
la source
3

Il arrive que je commence juste à apprendre le codage et que j'avais besoin de quelque chose de similaire à ce que vous venez de demander dans SQLite ( j'utilise [SQLiteStudio] (3.1.1) ).

Il arrive que vous deviez définir la `` contrainte '' de la colonne comme `` non nulle '', puis entrer la définition souhaitée en utilisant `` par défaut '' `` contrainte '' ou cela ne fonctionnera pas ( je ne sais pas s'il s'agit d'un SQLite ou du programme requis ).

Voici le code que j'ai utilisé:

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
la source
C'est la même logique utilisée dans MySQL; la valeur par défaut d'une colonne NULL est déjà NULL, donc définir une valeur par défaut impliquerait que la colonne ne soit pas NULL. Si vous spécifiez une valeur par défaut sur une colonne NULL sans la déclarer NOT NULL, cela peut vous dérouter lorsque des valeurs NULL par défaut sont insérées.
ChoNuff
1
L'instruction UNIQUE n'est pas nécessaire et déjà impliquée par l'instruction PRIMARY KEY.
dani
@dani Je suis d'accord avec vous, mais c'était le seul moyen de contourner les erreurs générées par SQLiteStudio 3.1.1 par manque de condition "Unique"
Nader Belal