SQLite外键?

Tha*_*Ngo 5 sqlite

我有2张桌子:AB.A有一个外键BB有一个外键A.但我不能让从外键AB,因为A在之前创建的B.

当SQLite不支持时,我该如何解决Alter Table

这是我的示例数据库:

Create Table A(
  A_ID    INTEGER PRIMARY KEY,
  B_ID    INTEGER,
  A_DESCRIPTION    TEXT,

  FOREIGN KEY (B_ID) REFERENCES B(B_ID)
)

Create Table B(
  B_ID    INTEGER PRIMARY KEY,
  A_ID    INTEGER,
  B_DESCRIPTION    TEXT,

  FOREIGN KEY (A_ID) REFERENCES A(A_ID)
)
Run Code Online (Sandbox Code Playgroud)

CL.*_*CL. 10

您遇到语法错误:FOREIGN KEY表格中缺少逗号B.

否则,您的架构是正确的.(SQLite将REFERENCES仅在需要时解释子句,因此创建对尚不存在的表的引用没有问题.)

请注意,插入记录会有问题,除非您首先插入带有NULL值的记录,并在引用的记录存在时稍后更新它们.创建延迟外键约束可能是个更好的主意.


Mik*_*ike 5

我相信你的问题实际上是你如何定义你的外键.定义圆形外键对我来说效果很好.请尝试此查询:

pragma foreign_keys=on; 

Create Table A(
  A_ID    INTEGER PRIMARY KEY,
  B_ID    INTEGER REFERENCES B(B_ID),
  A_DESCRIPTION    TEXT
);


Create Table B(
  B_ID    INTEGER PRIMARY KEY,
  A_ID    INTEGER REFERENCES A(A_ID),
  B_DESCRIPTION    TEXT
);
Run Code Online (Sandbox Code Playgroud)


小智 1

我相信我之前是通过在事务中创建表来完成的。