【问题标题】:Use of composite keys with an AUTOINCREMENT column in SQLite database [duplicate]在 SQLite 数据库中使用具有 AUTOINCREMENT 列的复合键 [重复]
【发布时间】:2015-10-08 14:35:08
【问题描述】:

我创建了一个表,其中有一列“_id”,它是一个带有 AUTOINCREMENT 的 INTEGER 类型。现在我知道 AUTOINCREMENT 上的列必须是 PRIMARY KEY ,如果我没记错的话,这是语法。但我想要复合键,所以我不将“_id”声明为(_id INTEGER PRIMARY KEY AUTOINCREMENT)在列定义中使用 PRIMARY KEY 定义,而是将其声明为(_id INTEGER AUTOINCREMENT, username TEXT UNIQUE, password TEXT, name TEXT, phonenumber TEXT, address TEXT, fine INTEGER, bookid INTEGER, PRIMARY KEY (_id, username, password))

但它给出了运行时错误。当我们有一个 AUTOINCREMENT 字段时,是否必须在列定义本身中声明 PRIMARY KEY?

这是错误

07-18 12:47:22.916: E/AndroidRuntime(3423): Caused by: android.database.sqlite.SQLiteException: near "AUTOINCREMENT": syntax error (code 1): , while compiling: CREATE TABLE userdetails (_id INTEGER AUTOINCREMENT, username TEXT UNIQUE, password TEXT, name TEXT, phonenumber TEXT, address TEXT, fine INTEGER, bookid INTEGER, PRIMARY KEY (_id, username, password));

【问题讨论】:

    标签: sqlite primary-key auto-increment composite-key


    【解决方案1】:

    不,列不需要是主键。但是,SQLite 仅在将一个键设置为主键时才允许使用 AUTOINCREMENT。这里多列设置为主键。因此,其中一个的自动增量不起作用。

    请参阅此 stackoverflow 帖子的答案:

    Auto Increment on Composite Primary Key

    【讨论】:

    • 不正确。根据SQLite documentation "AUTOINCREMENT is not allowed ... on any table column than INTEGER PRIMARY KEY"。链接问题中的 accepted answer 确实提供了一种有效的解决方法,而无需使用触发器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-25
    • 1970-01-01
    • 2021-03-22
    • 2013-12-19
    • 1970-01-01
    相关资源
    最近更新 更多