将NOT NULL约束添加到Cloud Spanner表

时间:2017-02-16 20:43:27

标签: google-cloud-platform google-cloud-spanner

如果使用可为空的列创建Cloud Spanner表,是否可以在列上添加NOT NULL约束而无需重新创建表?

3 个答案:

答案 0 :(得分:0)

您可以向非键列添加NOT NULL约束。您必须首先确保所有行实际上都具有该列的值。在完全应用NOT NULL约束之前,Spanner将扫描数据以进行验证。有关如何更改表的更多信息是herehere

但是,您无法将此约束添加到键列。这种更改需要重写表中的所有数据,因为密钥的空值会影响数据的编码方式。进行更改的唯一选择是创建一个按照您想要的方式设置的新表,进行代码更改以支持临时使用两个表,逐步将数据从旧表移动到新表,最后将代码更改为仅使用新表并删除旧表。如果你想进一步想要原始的表名,你就必须再做一遍。

答案 1 :(得分:0)

很遗憾,无法添加非空列

方法:

1添加可为空的列

ALTER TABLE table1 ADD COLUMN column1 STRING(255)
  1. 更新table1.column1,将该列设置为非空值(如果表不为空)。
UPDATE TABLE table1 SET column1 = "<GENERATED DATA>"
  1. 添加约束
ALTER TABLE table1 ADD COLUMN column1 STRING(255) NOT NULL

谢谢。

答案 2 :(得分:0)

在现有表上的 spanner 中创建可为空的列通常是一个三步过程...

# add new column to table
ALTER TABLE <table_name> ADD COLUMN <column_name> <value_type>;

# create default values
UPDATE <table_name> SET <column_name>=<default_value> WHERE TRUE;

# add constraint
ALTER TABLE <table_name> ALTER COLUMN <column_name> <value_type> NOT NULL;