Legen Sie den Standardwert einer Ganzzahlspalte SQLite fest

116

Ich erstelle eine SQLite-Datenbank 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);");

Ist es möglich, den Standardwert KEY_NOTE(eine Ganzzahl) für jede erstellte Zeile auf 0(Null) zu setzen? Wenn ja, welcher Code sollte der richtige sein?

Wiedergeboren
quelle

Antworten:

230

Verwenden Sie das Schlüsselwort 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);");

Dieser Link ist nützlich: http://www.sqlite.org/lang_createtable.html

Karakuri
quelle
8

Eine Spalte mit dem Standardwert:

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

<DefaultValue> ist ein Platzhalter für:

  • Wertliteral
  • ( Ausdruck )

Beispiele:

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

Es kommt vor, dass ich gerade erst anfange , Codierung zu lernen, und ich brauchte etwas Ähnliches, wie Sie gerade in SQLite gefragt haben ( ich verwende [SQLiteStudio] (3.1.1) ).

Es kommt vor, dass Sie die ' Einschränkung ' der Spalte als ' Nicht Null ' definieren und dann Ihre gewünschte Definition mit ' Standard ' ' Einschränkung ' eingeben müssen, sonst funktioniert sie nicht ( ich weiß nicht, ob dies eine SQLite oder die Programmanforderung ist ).

Hier ist der Code, den ich verwendet habe:

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
quelle
Es ist dieselbe Logik wie in MySQL. Der Standardwert einer nullbaren Spalte ist bereits NULL. Wenn Sie also einen Standardwert festlegen, bedeutet dies, dass die Spalte nicht nullwertfähig ist. Wenn Sie einen Standardwert für eine nullfähige Spalte angeben, ohne sie als NICHT NULL zu deklarieren, kann dies Sie verwirren, wenn Standardwerte für NULL eingefügt werden.
ChoNuff
1
Die UNIQUE-Anweisung wird nicht benötigt und ist bereits in der PRIMARY KEY-Anweisung enthalten.
Dani
@dani Ich stimme Ihnen zu, aber es war die einzige Möglichkeit, die Fehler zu umgehen, die SQLiteStudio 3.1.1 aufgrund des Fehlens einer "einzigartigen" Bedingung verursachte
Nader Belal