Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sqlite 外键不是';不执行_Sqlite_Google Gears - Fatal编程技术网

Sqlite 外键不是';不执行

Sqlite 外键不是';不执行,sqlite,google-gears,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, Si

为什么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节“启用外键支持”):

假设库是用 如果启用外键约束,则 仍然必须由 在运行时使用 PRAGMA外键命令。对于 例如:

sqlite>PRAGMA-foreign\u-keys=ON

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


您是否在相关连接中使用了
PRAGMA
?(假设,正如文档所说,sqlite是经过适当编译的,并且是一个足够新的版本,可以提供外键约束强制)。

您还可以通过嵌入connectionstring来启用外键支持:

foreign keys=True
例如:

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

非常感谢您的及时回复。我从未在文档中注意到这一点(下次会更仔细地查看)。刚刚尝试运行该命令后,我收到以下错误:“SQLite prepare()失败。错误:授权被拒绝详细信息:未授权表达式:PRAGMA foreign_keys=ON;”我假设他们使用的版本不支持该命令,或者已禁用该功能。我可以使用触发器创建相同的最终结果吗?如果有人能为SQLITE提供一些示例触发器语法吗?@Maxim,我相信SQLITE外键触发器需要与普通外键完全相同的底层功能(通常在SQLITE的嵌入式版本中删除,这些外键希望更小更快,而不是提供“完整的关系ACID能力”以可观的性能和占地面积成本)。