Bir tamsayı sütununun varsayılan değerini ayarla


117

Android'de bir SQLite veritabanı oluşturuyorum.

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

KEY_NOTEOluşturulan her satırın varsayılan değerini (tam sayı olan) 0(sıfır) olarak ayarlamak mümkün müdür ? Eğer öyleyse, doğru kod ne olmalıdır.

Yanıtlar:


232

SQLite anahtar sözcüğünü kullanın 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);");

Bu bağlantı yararlıdır: http://www.sqlite.org/lang_createtable.html


8

Varsayılan değere sahip bir sütun:

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

<DefaultValue> bir yer tutucudur:

  • gerçek değer
  • ( ifade )

Örnekler:

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

3

Kodlamayı öğrenmeye yeni başladım ve SQLite'de sorduğunuza benzer bir şeye ihtiyacım vardı ( [SQLiteStudio] (3.1.1) kullanıyorum ).

Sütunun ' Kısıtlamasını ' Boş Değil 'olarak tanımlamanız ve ardından' Varsayılan '' Kısıtlama ' kullanarak istediğiniz tanımı girmeniz gerekir, yoksa işe yaramaz ( bunun bir SQLite mi yoksa program gereksinimi mi olduğunu bilmiyorum ).

İşte kullandığım kod:

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

MySQL'de kullanılan mantıkla aynıdır; boş değer atanabilir bir sütunun öntanımlı değeri zaten NULL'dur, bu nedenle bir öntanımlı ayarlamak, sütunun null yapılamayacağı anlamına gelir. NOT NULL bildirmeden null yapılabilir bir sütunda bir varsayılan belirtirseniz, varsayılan NULL değerleri eklendiğinde kafanız karışabilir.
ChoNuff

1
UNIQUE ifadesi gerekli değildir ve PRIMARY KEY ifadesiyle zaten belirtilmiştir.
dani

@dani Size katılıyorum, ancak SQLiteStudio 3.1.1'in "Benzersiz" koşulun olmamasından kaynaklanan hataları atlamanın tek yolu buydu
Nader Belal
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.