⌘+k ctrl+k
1.1.3 (stable)
Search Shortcut cmd + k | ctrl + k
ALTER TABLE Statement

ALTER TABLE 语句更改目录中现有表的模式。

Examples

CREATE TABLE integers (i INTEGER, j INTEGER);

向表 integers 添加一个名为 k 的新列,它将填充默认值 NULL

ALTER TABLE integers ADD COLUMN k INTEGER;

向表 integers 添加一个名为 l 的新列,它将填充默认值 10:

ALTER TABLE integers ADD COLUMN l INTEGER DEFAULT 10;

从表 integers 中删除列 k

ALTER TABLE integers DROP k;

将列 i 的类型更改为 VARCHAR 类型,使用标准转换:

ALTER TABLE integers ALTER i TYPE VARCHAR;

将列 i 的类型更改为 VARCHAR 类型,使用指定的表达式转换每行的数据:

ALTER TABLE integers ALTER i SET DATA TYPE VARCHAR USING concat(i, '_', j);

设置列的默认值:

ALTER TABLE integers ALTER COLUMN i SET DEFAULT 10;

删除列的默认值:

ALTER TABLE integers ALTER COLUMN i DROP DEFAULT;

使列不可为空:

ALTER TABLE integers ALTER COLUMN i SET NOT NULL;

删除非NULL约束:

ALTER TABLE integers ALTER COLUMN i DROP NOT NULL;

重命名表:

ALTER TABLE integers RENAME TO integers_old;

重命名表的列:

ALTER TABLE integers RENAME i TO ii;

向表的列添加主键:

ALTER TABLE integers ADD PRIMARY KEY (i);

Syntax

ALTER TABLE 修改现有表的模式。 ALTER TABLE 所做的所有更改完全遵循事务语义,即它们在提交之前对其他事务不可见,并且可以通过回滚完全撤销。

RENAME TABLE

重命名表:

ALTER TABLE integers RENAME TO integers_old;

RENAME TO 子句重命名整个表,更改其在模式中的名称。请注意,依赖该表的任何视图不会自动更新。

RENAME COLUMN

重命名表的列:

ALTER TABLE integers RENAME i TO j;
ALTER TABLE integers RENAME COLUMN j TO k;

RENAME COLUMN 子句用于重命名表中的单个列。任何依赖此名称的约束(例如,CHECK 约束)都会自动更新。但是,请注意,任何依赖此列名的视图不会自动更新。

ADD COLUMN

Add a new column with name k to the table integers, it will be filled with the default value NULL:

ALTER TABLE integers ADD COLUMN k INTEGER;

Add a new column with name l to the table integers, it will be filled with the default value 10:

ALTER TABLE integers ADD COLUMN l INTEGER DEFAULT 10;

ADD COLUMN 子句可用于向表中添加指定类型的新列。新列将填充指定的默认值,如果未指定,则填充 NULL

DROP COLUMN

Drop the column k from the table integers:

ALTER TABLE integers DROP k;

DROP COLUMN 子句可用于从表中删除列。请注意,只有在列没有任何依赖的索引时才能删除列。这包括作为PRIMARY KEYUNIQUE约束的一部分创建的任何索引。作为多列检查约束的一部分的列也不能被删除。 如果您尝试删除带有索引的列,DuckDB 将返回以下错误消息:

Dependency Error: Cannot alter entry "..." because there are entries that depend on it.

ALTER TYPE

Change the type of the column i to the type VARCHAR using a standard cast:

ALTER TABLE integers ALTER i TYPE VARCHAR;

Change the type of the column i to the type VARCHAR, using the specified expression to convert the data for each row:

ALTER TABLE integers ALTER i SET DATA TYPE VARCHAR USING concat(i, '_', j);

SET DATA TYPE 子句用于更改表中列的数据类型。列中的任何数据将根据 USING 子句中提供的表达式进行转换,如果 USING 子句不存在,则直接转换为新的数据类型。请注意,只有在列没有任何依赖的索引且不属于任何 CHECK 约束时,才能更改其数据类型。

SET / DROP DEFAULT

设置列的默认值:

ALTER TABLE integers ALTER COLUMN i SET DEFAULT 10;

删除列的默认值:

ALTER TABLE integers ALTER COLUMN i DROP DEFAULT;

SET/DROP DEFAULT 子句修改现有列的 DEFAULT 值。请注意,这不会修改列中的任何现有数据。删除默认值等同于将默认值设置为 NULL。

警告 目前,如果存在任何依赖关系,DuckDB 将不允许您更改表。这意味着如果您在列上有索引,您首先需要删除索引,更改表,然后重新创建索引。否则,您将收到一个Dependency Error

ADD PRIMARY KEY

向表的列添加主键:

ALTER TABLE integers ADD PRIMARY KEY (i);

向表的多个列添加主键:

ALTER TABLE integers ADD PRIMARY KEY (i, j);

ADD / DROP CONSTRAINT

ADD CONSTRAINTDROP CONSTRAINT 子句在 DuckDB 中尚未支持。