Đặt giá trị mặc định của SQLite cột số nguyên


116

Tôi đang tạo cơ sở dữ liệu SQLite trong Android.

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

Có thể đặt giá trị mặc định của KEY_NOTE(là số nguyên) cho mọi hàng được tạo là 0(không) không? Nếu vậy, mã chính xác phải là gì.

Câu trả lời:


231

Sử dụng từ khóa 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);");

Liên kết này hữu ích: http://www.sqlite.org/lang_createtable.html


8

Một cột có giá trị mặc định:

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

<DefaultValue> là một trình giữ chỗ cho:

  • giá trị chữ
  • ( biểu hiện )

Ví dụ:

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

3

Điều xảy ra là tôi mới bắt đầu học viết mã và tôi cần một thứ gì đó tương tự như bạn vừa hỏi trong SQLite ( Tôi đang sử dụng [SQLiteStudio] (3.1.1) ).

Điều xảy ra là bạn phải xác định ' Ràng buộc ' của cột là ' Không phải Null ', sau đó nhập định nghĩa mong muốn của bạn bằng cách sử dụng ' Ràng buộc ' ' Mặc định ' nếu không nó sẽ không hoạt động ( Tôi không biết đây là SQLite hay yêu cầu của chương trình ).

Đây là mã tôi đã sử dụng:

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

Đó là cùng một logic được sử dụng trong MySQL; mặc định của cột có thể null đã là NULL, vì vậy nếu đặt giá trị mặc định theo cách khác thì có nghĩa là cột không thể null. Nếu bạn chỉ định một giá trị mặc định trên một cột nullable mà không khai báo nó NOT NULL, nó có thể khiến bạn bối rối khi các giá trị NULL mặc định được chèn vào.
ChoNuff

1
Câu lệnh UNIQUE không cần thiết và đã được ngụ ý bởi câu lệnh PRIMARY KEY.
dani

@dani Tôi đồng ý với bạn, nhưng đó là cách duy nhất để bỏ qua các lỗi mà SQLiteStudio 3.1.1 đang tạo ra do thiếu điều kiện "Duy nhất"
Nader Belal
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.