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

Cloud Spanner交错表写入时父表是否会被锁定?

在Cloud Spanner中写入交错子表Albums时,是否会锁定父表Singers?

表结构定义

CREATE TABLE Singers (
  SingerId   INT64 NOT NULL,
  FirstName  STRING(1024),
  LastName   STRING(1024),
  SingerInfo BYTES(MAX),
) PRIMARY KEY (SingerId);

CREATE TABLE Albums (
  SingerId     INT64 NOT NULL,
  AlbumId      INT64 NOT NULL,
  AlbumTitle   STRING(MAX),
) PRIMARY KEY (SingerId, AlbumId),
  INTERLEAVE IN PARENT Singers ON DELETE CASCADE;

问题核心

对Albums表执行写入操作时,是否会同时锁定Singers表,还是仅锁定Albums表?

官方锁机制说明(翻译)

与其他锁定整张表或整行的方式不同,Cloud Spanner中事务锁的粒度是单元格(即行与列的交叉点)。这意味着两个事务可以同时读取和修改同一行的不同列。为了在同一时间让尽可能多的事务能够访问特定数据单元格,Cloud Spanner采用了不同的锁模式。

结论与分析

根据上述锁机制,更新交错子表Albums时不会锁定父表Singers:

  • Spanner的锁粒度精确到单元格,写入Albums的操作只会针对该表内涉及的行和列(比如对应SingerId+AlbumId主键行的AlbumTitle等字段)加锁,完全不涉及父表Singers的任何单元格。
  • 父表Singers的行只有在被直接修改(比如更新FirstName、LastName等字段)时才会触发锁,子表的写入操作不会关联父表的锁逻辑。
  • 即使设置了ON DELETE CASCADE,也仅在父表行被删除时触发子表的级联删除,子表的写入操作不会影响父表的锁状态。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 22:34:50