外键未被强制执行

时间:2010-06-11 04:27:50

标签: sqlite google-gears

为什么SQLite没有强制执行以下外键约束(虽然执行正常)?我怎样才能加强这种关系?

CREATE TABLE User (
    UserID TEXT Unique NOT NULL PRIMARY KEY,
    FirstName TEXT NOT NULL,
    LastName TEXT NOT NULL,
    Username TEXT NOT NULL,
    Password TEXT NOT NULL,
    Email TEXT NOT NULL,
    SignupDate TEXT NOT NULL
)

CREATE TABLE Category (
    CategoryID TEXT Unique NOT NULL PRIMARY KEY,
    UserID TEXT,
    FOREIGN KEY(UserID) REFERENCES User(UserID)
)

2 个答案:

答案 0 :(得分:15)

正如the relevant docs所说(在 2.启用外键支持部分):

  

假设库已编译   它启用了外键约束   必须仍然由   应用程序在运行时,使用   PRAGMA foreign_keys命令。对于   例如:

     

sqlite> PRAGMA foreign_keys = ON;

     

禁用外键约束   默认情况下(向后   兼容性),所以必须启用   分别为每个数据库   单独连接。

您是否在相关连接中使用了PRAGMA? (假设,正如文档所说,sqlite被正确编译,当然也是最近提供外键约束执行的版本)。

答案 1 :(得分:4)

您还可以通过嵌入在connectionstring中打开外键支持:

foreign keys=True

示例:

"Data Source={DatabaseFullFilePath};Version=3;foreign keys=True;datetimeformat=CurrentCulture"