本页面介绍了如何使用 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
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