Sqlite 修改外键约束下的行

Sqlite 修改外键约束下的行,sqlite,Sqlite,我有一个包含整数列的表,如下所示。bexParentID和bexParentTypeID列的用途是将外键约束到同一表中的其他行,即(bexParentID,bexParentTypeID)对同一表中的(bexID,BextTypeId)具有复合FK约束 这是创建脚本: CREATE TABLE [main].[Boolean_Expressions]( [bexID] INTEGER PRIMARY KEY NOT NULL, [bexTypeID] INTEGER NOT NULL,

我有一个包含整数列的表,如下所示。bexParentID和bexParentTypeID列的用途是将外键约束到同一表中的其他行,即
(bexParentID,bexParentTypeID)
对同一表中的
(bexID,BextTypeId)
具有复合FK约束

这是创建脚本:

CREATE TABLE [main].[Boolean_Expressions](
  [bexID] INTEGER PRIMARY KEY NOT NULL, 
  [bexTypeID] INTEGER NOT NULL, 
  [bexParentID] INTEGER NOT NULL, 
  [bexParentTypeID] INTEGER NOT NULL, 
  FOREIGN KEY([bexParentID], [bexParentTypeID]) REFERENCES [Boolean_Expressions]([bexID], [bexTypeID]),
  UNIQUE([bexID], [bexTypeID]);

下面是此表中可能出现的数据示例。

如何更新具有来自行B、C、D的外键约束的行(称为a)的类型。。。在上面?更新行B、C、D…的父类型是违反规定的,在第一行中更新类型也是违反规定的


我只能想到“指向”B,C,D。。。。通过更改其ParentID和ParentType以指向完全不同的行(称为X),然后更改A的类型,然后“指向”B、C、D。。。回到A.

两个可能更简单的选项

a) 在更新之前关闭外键,然后在更新之后打开。使用“PRAGMA-foreign\u-keys=off”和“PRAGMA-foreign\u-keys=on”

  • =false
    (关)或
    =true
    (开)或
    =0
    (关)或
    =1
    (开)(大于0的任何值均为开)

  • 注释不能在事务中有效使用(也称为NOP)

e、 g

b) 使用延迟外键,即包括:-

DEFERRABLE INITIALLY DEFERRED
在外键定义中

e、 g

提交事务时会检查外键冲突。因此,这些更改需要在事务内部完成。e、 g

BEGIN TRASNACTION;
UPDATE ....;
END TRANSACTION;

将更新级联时的
添加到FK约束:

FOREIGN KEY([bexParentID], [bexParentTypeID]) REFERENCES [Boolean_Expressions]([bexID], [bexTypeID]) ON UPDATE CASCADE

效果:只需更新父行即可;所有从属子行都将更新为具有相同的值。

谢谢!推迟是我想要的。我还不能更新投票对不起:)本打算建议这样做,但我想不起在复合FK索引上使用,所以在未测试它之前,我不会建议这样做。是的,它在上面的表和其他具有相同FK约束的表上起作用。您的回答引导我走向更新级联,因为以前我不知道FK子句。
BEGIN TRASNACTION;
UPDATE ....;
END TRANSACTION;
FOREIGN KEY([bexParentID], [bexParentTypeID]) REFERENCES [Boolean_Expressions]([bexID], [bexTypeID]) ON UPDATE CASCADE