设置整数列SQLite的默认值


116

我在android中创建一个SQLite数据库。

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

是否可以将KEY_NOTE创建的每一行的默认值(是整数)设置为0(零)?如果是这样,应该是正确的代码。

Answers:


230

使用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);");

该链接很有用:http : //www.sqlite.org/lang_createtable.html


8

具有默认值的列:

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

<DefaultValue> 是以下内容的占位符:

  • 价值文字
  • ( 表达 )

例子:

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

3

碰巧,我才刚刚开始学习编码,并且我需要与您在SQLite中要求的类似的东西(我正在使用[SQLiteStudio](3.1.1))。

碰巧您必须将列的“ 约束 ” 定义为“ 非空 ”,然后使用“ 默认值 ”,“ 约束 ” 输入所需的定义,否则它将不起作用(我不知道这是SQLite还是程序要求)。

这是我使用的代码:

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

这与MySQL中使用的逻辑相同。可为空的列的默认值已经为NULL,因此设置默认值将意味着该列不可为空。如果您在可为空的列上指定默认值而未声明为NOT NULL,则在插入默认NULL值时可能会使您感到困惑。
ChoNuff

1
UNIQUE语句不是必需的,并且已由PRIMARY KEY语句隐含。
丹妮(Dani)

@dani我同意你的观点,但这是绕过SQLiteStudio 3.1.1由于缺乏“独特”条件而产生的错误的唯一方法
Nader Belal
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.