15

为什么 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)
)
4

2 回答 2

22

正如相关文档所说(在第2 节。启用外键支持):

假设库是在启用外键约束的情况下编译的,它仍然必须由应用程序在运行时使用 PRAGMA foreign_keys 命令启用。例如:

sqlite> PRAGMA foreign_keys = ON;

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

您是否PRAGMA在相关连接中使用过它?(假设,正如文档所说,sqlite 编译得当,当然还有一个足够新的版本来提供外键约束执行)。

于 2010-06-11T04:41:09.517 回答
4

您还可以通过嵌入连接字符串来打开外键支持:

foreign keys=True

例子:

"Data Source={DatabaseFullFilePath};Version=3;foreign keys=True;datetimeformat=CurrentCulture"
于 2017-02-15T10:50:48.807 回答