ALTER TABLE

This page documents a preview version. v2.23 Preview
Preview includes features under active development and is for development and testing only.
For production, use the latest stable version (v2024.1).

Synopsis

Use the ALTER TABLE statement to change the schema or definition of an existing table. It allows adding, dropping, or renaming a column as well as updating a table property.

Syntax

Diagram

ALTERTABLEtable_nameADD,column_namecolumn_typeDROP,column_nameRENAME,column_nameTOcolumn_nameWITHANDproperty_name=property_literal

Grammar

alter_table ::= ALTER TABLE table_name alter_operator [ alter_operator ...]

alter_operator ::= add_op | drop_op | rename_op | property_op

add_op ::= ADD column_name column_type [ ',' column_name column_type ...]

drop_op ::= DROP column_name [ ',' column_name ...]

rename_op ::= RENAME column_name TO column_name [ ',' column_name TO column_name ...]

property_op ::= WITH property_name '=' property_literal [ AND property_name '=' property_literal ...]

Where

  • table_name, column_name, and property_name are identifiers (table_name may be qualified with a keyspace name).
  • property_literal is a literal of either boolean, text, or map data type.

Semantics

  • An error is raised if table_name does not exist in the associated keyspace.
  • Columns that are part of PRIMARY KEY cannot be altered.
  • When adding a column, its value for all existing rows in the table defaults to null.
  • After dropping a column, all values currently stored for that column in the table are discarded (if any).

Examples

Add a column to a table

ycqlsh:example> CREATE TABLE employees (id INT, name TEXT, salary FLOAT, PRIMARY KEY((id), name));
ycqlsh:example> ALTER TABLE employees ADD title TEXT;
ycqlsh:example> DESCRIBE TABLE employees;

Following result would be shown.

CREATE TABLE example.employees (
    id int,
    name text,
    salary float,
    title text,
    PRIMARY KEY (id, name)
) WITH CLUSTERING ORDER BY (name ASC);

Remove a column from a table

ycqlsh:example> ALTER TABLE employees DROP salary;
ycqlsh:example> DESCRIBE TABLE employees;

Following result would be shown.

CREATE TABLE example.employees (
    id int,
    name text,
    title text,
    PRIMARY KEY (id, name)
) WITH CLUSTERING ORDER BY (name ASC);

Rename a column in a table

ycqlsh:example> ALTER TABLE employees RENAME title TO job_title;
ycqlsh:example> DESCRIBE TABLE employees;

Following result would be shown.

CREATE TABLE example.employees (
    id int,
    name text,
    job_title text,
    PRIMARY KEY (id, name)
) WITH CLUSTERING ORDER BY (name ASC);

Update a table property

You can do this as follows:

ycqlsh:example> ALTER TABLE employees WITH default_time_to_live = 5;
ycqlsh:example> DESCRIBE TABLE employees;

Following result would be shown.

CREATE TABLE example.employees (
    id int,
    name text,
    job_title text,
    PRIMARY KEY (id, name)
) WITH CLUSTERING ORDER BY (name ASC)
    AND default_time_to_live = 5;

See also