结构化查询语言(Structured Query Language)
Completion requirements
ALTER TABLE 命令
ALTER TABLE
命令可以对表的列定义和约束进行动态修改。这包括扩展、修改或删除现有定义,将数据类型转换为其他类型,或根据新定义验证现有数据。
-- 修改列定义
ALTER TABLE <table_name> { ADD | ALTER } [ COLUMN ] <column_name> <column_definition>;
ALTER TABLE <table_name> { DROP } [ COLUMN ] <column_name>;
-- 修改表约束
ALTER TABLE <table_name> { ADD | ALTER } CONSTRAINT <constraint_name> <constraint_definition>;
ALTER TABLE <table_name> { DROP } CONSTRAINT <constraint_name>;
以下示例基于测试表 t1
:
CREATE TABLE t1 (
id NUMERIC PRIMARY KEY,
col_1 CHAR(4)
);
列操作
添加列
可以使用 ADD COLUMN
子句为现有表添加新列。在此子句中,可以使用 CREATE TABLE
语句中的所有选项,如数据类型、默认值、NOT NULL
、主键、唯一约束、外键和检查约束。
-- 添加一个具有约束的新列
ALTER TABLE t1 ADD COLUMN col_2 VARCHAR(100) CHECK (length(col_2) > 5);
-- 提示:Oracle 不支持关键字 `COLUMN`。
修改列的特性
可以通过 ALTER COLUMN
子句更改现有列的一些特性,包括:
- 数据类型
- 默认值(
DEFAULT
子句) NOT NULL
子句
更改时,新定义必须与现有数据兼容。例如:
- 将
VARCHAR
转为NUMERIC
需要所有现有数据都能成功转换,否则操作会失败(例如,'xyz'
无法转换)。 - 将
NUMERIC
转为VARCHAR
时,只要VARCHAR
的长度足够存储结果,转换就会成功。
提示: 一些数据库实现会忽略 SQL 标准的语法,改用其他关键字(如 MODIFY
)。
-- 更改数据类型
ALTER TABLE t1 ALTER COLUMN col_1 SET DATA TYPE NUMERIC;
-- 更改默认值
ALTER TABLE t1 ALTER COLUMN col_1 SET DEFAULT 'n/a';
-- 设置或移除 NOT NULL
ALTER TABLE t1 ALTER COLUMN col_1 SET NOT NULL;
ALTER TABLE t1 ALTER COLUMN col_1 DROP NOT NULL;
删除列
可以从现有表中删除列。
ALTER TABLE t1 DROP COLUMN col_2;
-- 提示:在 Oracle 中,关键字 `COLUMN` 是强制性的。
提示: 一些数据库实现扩展了 SQL 标准,支持 RENAME
或 SET
INVISIBLE
命令。
表约束操作
添加表约束
可以为表添加约束,如主键、唯一约束、外键等。
ALTER TABLE t1 ADD CONSTRAINT t1_col_1_unique UNIQUE (col_1);
修改表约束
可以修改现有表约束。
ALTER TABLE t1 ALTER CONSTRAINT t1_col_1_unique UNIQUE (col_1);
-- 提示:某些实现可能不支持标准语法,而使用其他关键字(如 `MODIFY`)。
删除表约束
可以使用 DROP CONSTRAINT
删除表约束。
ALTER TABLE t1 DROP CONSTRAINT t1_col_1_unique;
-- 提示:MySQL 不支持标准语法,可使用 `DROP FOREIGN KEY` 或 `DROP INDEX` 替代。
提示: 一些数据库实现扩展了 SQL 标准,支持约束的 ENABLE
/ DISABLE
命令。
Last modified: Tuesday, 28 January 2025, 1:57 PM