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 - Fatal编程技术网

如果在SQLite中使用外键,则创建表失败

如果在SQLite中使用外键,则创建表失败,sqlite,Sqlite,我真的不知道为什么这段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 PR

我真的不知道为什么这段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();

外键必须在列之后进行编码,或者作为列定义的一部分,不包含外键(列),如所暗示的列,因此替换

"CREATE TABLE  IF NOT EXISTS appointment (
  id TEXT PRIMARY KEY NOT NULL ,  
  customer TEXT   , 
  FOREIGN KEY (customer) REFERENCES customers(id),
  nextfield TEXT
)"
使用(表约束):-

或使用(列约束):-

根据规范,
nextfield TEXT
应与其他列定义放在一起<代码>外键与
表约束
部分相关,应在列定义之后定义:

$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)
)");

customer TEXT
是问题所在,我认为您不能说列中的文本应该对应于另一个表中的int。第二个可以通过,因为表已经存在。1) 如果你清理数据库,这三种方法都有效吗?2) 您得到的错误消息是什么?1)在哪里看到INT?2)第三个不能与干净的DB@agoldenev是的,对不起,好的。外键文档将受益于提示!例如,本文档不包含用于在SQLite中创建外键约束的语法的完整描述。这可以在CREATETABLE语句的文档中找到。外键部分。
"CREATE TABLE  IF NOT EXISTS appointment (
  id TEXT PRIMARY KEY NOT NULL ,  
  customer TEXT  REFERENCES customers(id) , 
  nextfield TEXT)"
$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)
)");