我试图在sqlite中以编程方式创建表。 但是当我尝试创建外键约束时,它给了我语法错误。 谁能告诉我为什么。

这是我的代码:

CREATE TABLE tblUser (ID INT64 Primary Key, Name NVARCHAR(100) NOT NULL, EMail
NVARCHAR(100) NOT NULL); 

CREATE TABLE tblMachine (ID INT64 Primary Key, Name NVARCHAR(100) NOT NULL,
ProcessorID NVARCHAR(100) NOT NULL, BiosID NVARCHAR(100) NOT NULL);

CREATE TABLE tblLicenseInfo (ID INT64 Primary Key, UserID INT64 NOT NULL,
MachineID INT64 NOT NULL, ExpirationDate DATETIME NOT NULL, DateOfChange DATETIME
NOT NULL, LicenseKey NVARCHAR(100) NOT NULL),

FOREIGN KEY (UserID) REFERENCES tblUser.ID,
FOREIGN KEY (MachineID) REFERENCES tblMachine.ID;  

非常感谢你。

#1楼 票数:1 已采纳

您需要在CREATE TABLE命令的括号包括FOREIGN KEY子句。 看一下CREATE TABLE语法图 ,其中FOREIGN KEY子句是表约束。

此外,其他表中引用的列需要用括号表示,而不用点符号表示。 FOREIGN KEY子句语法图中对此进行了描述。

因此,您的CREATE TABLE语句应如下所示:

CREATE TABLE tblLicenseInfo (
    ID INT64 PRIMARY KEY,
    UserID INT64 NOT NULL,
    MachineID INT674 NOT NULL,
    ExpirationDate DATETIME NOT NULL,
    DateOfChange DATETIME NOT NULL,
    LicenseKey NVARCHAR(100) NOT NULL,
    FOREIGN KEY (UserID) REFERENCES tblUser (ID),
    FOREIGN KEY (MachineID) REFERENCES tblMachine (ID)
);

#2楼 票数:0

你需要一个选项来做到这一点:在PHP中尝试

$db = new SQLite3("../SQLLite/test.db");
$db->exec('PRAGMA foreign_keys = ON');

举例来说,还有其他方法

sqlite> PRAGMA foreign_keys = ON;

来源: https : //www.sqlite.org/foreignkeys.html

  ask by user3292642 translate from so

未解决问题?本站智能推荐:

1回复

用外键创建表

我编写了一个创建表的函数: 我想测试我的功能并编写以下代码。 “访问”和“测试”只是带有某些列的表。 在表“ test_result”中,它包含“访问”表中的rowid的外键和“测试”表中的rowid的外键。 我的代码适用于“访问”和“测试”表,但无法演示“ test_result
1回复

使用外键为带有外键的表创建唯一索引

假设我有一个名为TBL_ACCOUNT的表,其中包含我的所有用户,还有一个名为TBL_EMAIL_SUBSCRIPTION的表,其中包含用户已订阅的提要。 我正在尝试使其每个用户+ feed组合中只有一个条目,因此user1只能订阅一次feed1,但是user1可以同时订阅feed1和feed
1回复

如何为已创建的表添加外键?

我已经向数据库中添加了一个名为设置的表。 该表有一个称为id(整数)的列,它是irirmary键。 我还向称为会话的表中添加了名为settingsID的列。 我想做的是将一个外键添加到引用主键的settingsID中。 我不想创建一个新表,因为它已经创建。 我要做的就是从会话表中的settings
2回复

使用外键创建表的SQLite语法

我正在创建一个包含外键引用的表。 我想知道所需的语法。 大多数情况下,我见过以下内容(来自http://www.sqlite.org/foreignkeys.html#fk_basics ): 但是,从同一个站点( http://www.sqlite.org/foreignkeys.
2回复

无法使用外键创建sqlite表

我正在尝试做一个使用外键通过 sqlite 链接两个表的简单示例。 但是,我不断收到错误消息。 我有两张桌子。 成员, 字符. 一个成员可以有多个字符。 这是架构: CREATE TABLE "member" ( "member_id" TEXT NOT NULL, "platf
2回复

无法在sqlite中用外键创建表

如果运行,请保持代码行db.execSQL(createOrderTable);无法运行我的应用程序db.execSQL(createOrderTable); 和db.execSQL(createOrderDetail); ,这将使用外键创建两个表,然后将其删除,应用程序运行正常。 这
2回复

在sqlite中用外键创建表

上面是我给定的带有列的表,我想使用外键创建第三个表名Record。 这是我创建的stmt 但它给我的错误是“ QLiteManager:可能的SQL语法错误:CREATE TABLE Records(id INTEGER PRIMARY KEY,DateWithTime DATETI
1回复

SQLite如何使用外键创建表

因此,我搜索了一些与此主题有关的问题,但我意识到这些问题与是否允许您创建没有PK等的表有关。我的问题是以下代码会产生错误: E/SQLiteLog: (1) near "FOREIGN": syntax error 码: 在MSSQLSERVER执行此代码可完美运行,但是在使用SQ