如果使用可为空的列创建Cloud Spanner表,是否可以在列上添加NOT NULL约束而无需重新创建表?
答案 0 :(得分:0)
您可以向非键列添加NOT NULL约束。您必须首先确保所有行实际上都具有该列的值。在完全应用NOT NULL约束之前,Spanner将扫描数据以进行验证。有关如何更改表的更多信息是here和here。
但是,您无法将此约束添加到键列。这种更改需要重写表中的所有数据,因为密钥的空值会影响数据的编码方式。进行更改的唯一选择是创建一个按照您想要的方式设置的新表,进行代码更改以支持临时使用两个表,逐步将数据从旧表移动到新表,最后将代码更改为仅使用新表并删除旧表。如果你想进一步想要原始的表名,你就必须再做一遍。
答案 1 :(得分:0)
很遗憾,无法添加非空列
方法:
1添加可为空的列
ALTER TABLE table1 ADD COLUMN column1 STRING(255)
UPDATE TABLE table1 SET column1 = "<GENERATED DATA>"
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;