ตั้งค่าเริ่มต้นของคอลัมน์จำนวนเต็ม SQLite


117

ฉันกำลังสร้างฐานข้อมูล SQLite ใน Android

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(ศูนย์) ถ้าเป็นเช่นนั้นรหัสที่ถูกต้องควรเป็นอย่างไร

คำตอบ:



8

คอลัมน์ที่มีค่าเริ่มต้น:

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

<DefaultValue> เป็นตัวยึดสำหรับ:

  • ค่าตามตัวอักษร
  • ( การแสดงออก )

ตัวอย่าง:

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

3

เกิดขึ้นว่าฉันเพิ่งเริ่มเรียนรู้การเขียนโค้ดและฉันต้องการบางอย่างที่คล้ายกับที่คุณเพิ่งถามใน SQLite ( ฉันใช้ [SQLiteStudio] (3.1.1) )

เกิดขึ้นว่าคุณต้องกำหนด ' Constraint ' ของคอลัมน์เป็น ' Not Null ' จากนั้นป้อนคำจำกัดความที่คุณต้องการโดยใช้ ' Default ' ' Constraint ' ไม่เช่นนั้นจะไม่ทำงาน ( ฉันไม่รู้ว่านี่เป็น 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 ค่าเริ่มต้นของคอลัมน์ที่เป็นโมฆะเป็นค่าว่างอยู่แล้วดังนั้นการตั้งค่าเริ่มต้นเป็นอย่างอื่นหมายความว่าคอลัมน์นั้นไม่สามารถเป็นค่าว่างได้ หากคุณระบุค่าดีฟอลต์ในคอลัมน์ที่เป็นโมฆะโดยไม่ได้ประกาศว่า NOT NULL อาจทำให้คุณสับสนเมื่อใส่ค่า NULL เริ่มต้น
ChoNuff

1
ไม่จำเป็นต้องใช้คำสั่ง UNIQUE และโดยนัยแล้วโดยคำสั่ง PRIMARY KEY
dani

@dani ฉันเห็นด้วยกับคุณ แต่มันเป็นวิธีเดียวที่จะหลีกเลี่ยงข้อผิดพลาดที่ SQLiteStudio 3.1.1 สร้างขึ้นจากการขาดเงื่อนไขที่ "ไม่เหมือนใคร"
Nader Belal
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.