Sqlite 修改外键约束下的行
我有一个包含整数列的表,如下所示。bexParentID和bexParentTypeID列的用途是将外键约束到同一表中的其他行,即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)
对同一表中的(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
(开)(大于0的任何值均为开)=1
- 注释不能在事务中有效使用(也称为NOP)
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