我真的不知道为什么这个PHP代码没有创建三个表。第一个和第二个很好。但是第三个失败了。第三个与第二个非常相似,但是在外键定义之后还有另一个字段。我在这里做错了什么?
$db = new \PDO("sqlite:d:/temp/test_db.sqlite");
$db->exec("PRAGMA foreign_keys = 'ON'");
$statement = $db->query("CREATE TABLE IF NOT EXISTS customers(
id TEXT PRIMARY KEY NOT NULL ,
name TEXT
)");
$statement->execute();
$statement = $db->query("CREATE TABLE IF NOT EXISTS appointments (
id TEXT PRIMARY KEY NOT NULL ,
customer TEXT ,
FOREIGN KEY (customer) REFERENCES customers(id)
)");
$statement->execute();
$statement = $db->query("CREATE TABLE IF NOT EXISTS appointment (
id TEXT PRIMARY KEY NOT NULL ,
customer TEXT ,
FOREIGN KEY (customer) REFERENCES customers(id),
nextfield TEXT
)");
$statement->execute();
最佳答案
根据SQLite grammar规范,nextfield TEXT
应该与其他列定义一起放置。 FOREIGN KEY
与table-constraint
部分相关,应在列定义之后定义:
$statement = $db->query("CREATE TABLE IF NOT EXISTS appointment (
id TEXT PRIMARY KEY NOT NULL ,
customer TEXT ,
nextfield TEXT,
FOREIGN KEY (customer) REFERENCES customers(id)
)");
关于sqlite - 如果在SQLite中使用外键,则创建表失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48019564/