CQL中ALTER TABLE同时添加列与设置TTL报错,是否有语法限制?
CQL合并ALTER TABLE操作的限制说明
是的,CQL语法确实存在这类合并操作的限制——无法在单条ALTER TABLE语句中同时执行添加字段(ADD)和修改表属性(如default_time_to_live)的操作,必须拆分为两条独立的ALTER TABLE语句分别执行。
原因说明
根据Cassandra的CQL语法规范,ALTER TABLE的不同操作子句是互斥的:
- 当执行ADD/DROP/ALTER字段类型这类表结构变更操作时,语句只能以分号结尾,不能附加WITH子句来修改表属性;
- 当使用WITH子句修改表属性(如default_time_to_live、压缩策略等)时,语句中也不能包含ADD/DROP等结构变更操作。
错误示例(执行失败)
ALTER TABLE keyspace_name_abc.table_name ADD (field1 text, field2 text) WITH default_time_to_live = 15552000;
报错信息:
SyntaxException: line 1:NN mismatched input 'WITH' expecting EOF (...field1 text, field2 text [WITH] ...)
正确示例(拆分执行)
-- 添加字段 ALTER TABLE keyspace_name_abc.table_name ADD (field1 text, field2 text); -- 设置默认TTL ALTER TABLE keyspace_name_abc.table_name WITH default_time_to_live = 15552000;
内容的提问来源于stack exchange,提问作者JaimeRG
相关产品推荐
相关产品推荐

