You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GCP Spanner中父表执行insert_or_update是否会删除子表行?

关于Spanner父表执行insert_or_update(update操作)时交错子行的留存问题

当对Spanner中已存在的PARENT表行执行insert_or_update(实际触发update逻辑)时,交错表中的现有子行会被完整保留,不会被自动删除。

原因很直接:Spanner的交错表依赖父表主键建立关联关系,insert_or_update针对父表的update操作仅会修改父行自身的列值(只要没修改主键),不会主动触及关联的子行数据。只有当你显式删除子行、父行主键被修改(导致子行关联主键失效),或是父行被删除时,才会影响到子行——其中父行删除会触发子行级联删除,但单纯的父行update(包括通过insert_or_update实现的update)完全不会触发这个逻辑。

举个实际场景:假设你有父表Orders(主键order_id),交错子表OrderItems(主键order_id + item_id,关联父表Orders)。当你执行:

INSERT_OR_UPDATE Orders (order_id, status) VALUES (1001, 'DELIVERED')

而order_id=1001的父行已经存在,这只会更新父行的status字段,OrderItems中所有order_id=1001的子行依然会保留在库中,不会有任何变动。

内容的提问来源于stack exchange,提问作者randomdatascientist

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 08:56:06