使用 Google Cloud CLI 插入、更新和删除数据

本页面介绍了如何使用 gcloud 命令行工具插入、更新和删除数据。

使用 DML 修改数据

要执行数据操纵语言 (DML) 语句,请使用 gcloud spanner databases execute-sql 命令。以下示例向 Singers 表中添加一个新行。

gcloud spanner databases execute-sql example-db --instance=test-instance \
    --sql="INSERT Singers (SingerId, FirstName, LastName) VALUES (1, 'Marc', 'Richards')"

如需执行分区 DML 语句,请将 gcloud spanner databases execute-sql 命令与 --enable-partitioned-dml 选项结合使用。以下示例更新 Albums 表中的行。

gcloud spanner databases execute-sql example-db \
    --instance=test-instance --enable-partitioned-dml \
    --sql='UPDATE Albums SET MarketingBudget = 0 WHERE MarketingBudget IS NULL'

有关 Spanner DML 参考,请参阅 数据操纵语言语法

使用 rows 命令组修改行

使用 gcloud spanner rows 命令组修改数据库中的数据:

  • 在表中插入新行。
  • 更新表中现有行的列。
  • 从表中删除行。

rows 命令组可识别所有有效列类型的字面量。

在表中插入行

要在表中插入新行,必须包含键列和任何其他必需列的值:

gcloud spanner rows insert --instance=INSTANCE_ID --database=DATABASE_ID \
    --table=TABLE_NAME \
    --data=COL_NAME_1=COL_VALUE_1,COL_NAME_2=COL_VALUE_2,COL_NAME_3=COL_VALUE_3,...,COL_NAME_N=COL_VALUE_N

以下示例在 Singers 表中插入新行:

gcloud spanner rows insert --instance=test-instance --database=example-db \
    --table=Singers \
    --data=SingerId=1,FirstName='Marc',LastName='Richards'

更新表中的行

要更新表中的行,必须包含要更新的键列和列的值:

gcloud spanner rows update --instance=INSTANCE_ID --database=DATABASE_ID \
    --table=TABLE_NAME \
    --data=COL_NAME_1=COL_VALUE_1,COL_NAME_2=COL_VALUE_2,COL_NAME_3=COL_VALUE_3,...,COL_NAME_N=COL_VALUE_N

以下示例更新 Singers 表中的行:

gcloud spanner rows update --instance=test-instance --database=example-db \
    --table=Singers \
    --data=SingerId=1,FirstName='Marc',LastName='Richards'

您无法使用 update 命令更改键值。要更新键值,必须创建一个新行并删除现有行。

从表中删除行

要删除行,必须指定主键列的值:

gcloud spanner rows delete --instance=INSTANCE_ID --database=DATABASE_ID  \
    --table=TABLE_NAME \
    --keys=KEY_VALUE_1,KEY_VALUE_2,KEY_VALUE_3
以下示例将从“Singers”表中删除一行:
gcloud spanner rows delete --instance=test-instance --database=example-db \
    --table=Singers \
    --keys=1

指定数组值

要在 ARRAY中插入或更新值,请将数据放在 YAML 文件中并使用 --flags-file 选项。

例如,此 YAML 文件指定了 Numbers 列的数组 [1,2,3]

# stats.yaml
--data:
    Id: 1
    Locked: True
    Numbers:
        - 1
        - 2
        - 3

要插入包含 YAML 数据的行,请使用 --flags-file 选项:

gcloud spanner rows insert --instance=test-instance --database=example-db \
     --table=Stats \
     --flags-file stats.yaml

对于 NULL 数组,请勿在文件中包含 Numbers 的值:

# stats.yaml
--data:
    Id: 1
    Locked: True

对于空数组,请将数组定义为 []

# stats.yaml
--data:
    Id: 1
    Locked: True
    Numbers: []

指定提交时间戳

要在提交时间戳列中自动插入或更新值,请传递 spanner.commit_timestamp() 作为列的值。以下示例在插入行时将提交时间戳写入 LastUpdated 列。

gcloud spanner rows insert --instance=test-instance --database=example-db \
    --table=Singers \
    --data=SingerId=1,LastUpdated='spanner.commit_timestamp()'

以下示例在 LastUpdated 列中写入特定的时间戳值:

gcloud spanner rows update --instance=test-instance --database=example-db \
    --table=Singers \
    --data=SingerId=1,LastUpdated=2017-01-02T12:34:00.45Z