1

我想为我们的软件实现一个患者数据库,但外键语句有问题。我正在使用带有 C# 的最新 SQLite DLL。

当我尝试运行以下代码时:

dbConnection = "Data Source=SQLiteMyDatabase.db;foreign keys=true;";
if (connections == 0)
{
  cnn = new SQLiteConnection(dbConnection);
  cnn.Open();
  this.ExecuteNonQuery("CREATE TABLE IF NOT EXISTS patients ( id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, name VARCHAR(100) NOT NULL;");
  this.ExecuteNonQuery("CREATE TABLE IF NOT EXISTS images ( FOREIGN KEY (patientID) REFERENCES patients(id), nameRed VARCHAR(20) NOT NULL PRIMARY KEY;");
}

我得到错误:

SQLite error near "FOREIGN": syntax error

为什么会这样?

4

1 回答 1

5

为了创建外键,您必须首先创建列:

CREATE TABLE IF NOT EXISTS images (
    nameRed VARCHAR(20) NOT NULL PRIMARY KEY, 
    patientID INT, 
    FOREIGN KEY (patientID) REFERENCES patients(id) 
 );

请注意:

  1. 我首先在创建的列列表中移动了主键列 ( nameRed),但这只是惯例。它可以排在第二位。
  2. 您使用数据类型 VARCHAR 并且 SQlite 将接受它,但请注意,它被映射到类型 TEXT,最大长度将被忽略,并且您将能够在列中存储其他数据类型。SQLite 在数据类型方面有点有趣(它有一个经过深思熟虑的系统,但与大多数其他 SQL 数据库完全不同)。
  3. 为了使事情更加混乱,您可以将 PRIMARY KEY 声明为列的属性(尽管您也可以在列列表之后声明 FOREIGN KEY)。
于 2012-10-17T15:55:11.740 回答