如果用户的需求发生了变化,则基本表的结构必然要进行相应的调整。对于已经装载了大量数据的表,或者被其他数据库对象引用(例如参照完整性)的表,调整表结构不宜采取删除重建的办法。SQL 提供了 ALTER TABLE 语句用于修改基本表,其语法格式为:
ALTER TABLE <表名>
{
ADD (<新列名> <新列类型> [BEFORE <列名>] [列级完整性约束],…)
|DROP (<旧列名>[ RESTRICT | CASCADE ], …)
|MODIFY (<旧列名> <新类型> [列级完整性约束], … )
}
要修改的基本表由<表名>指定。ADD 子句用于向基本表中添加新列,描述新列的语法格式与 CREATE TABLE 中定义列的格式相同。DROP 子句用于删除表中已有的列。MODIFY子句用于修改已有列的定义。注意,ALTER TABLE 修改的是表本身的结构(即表的定义),而不是表中装载的数据。
例 1.8 在 customer 表中添加 city 列,用于存储客户所在的城市:
alter table customer add city CHAR(10) before state;
使用子句 before state 表示将列插入表的 state 列之前,若不声明则在表的最后添加该列。
例 1.9 将 customer 表中的 city 列删除:
alter table customer drop city;
执行该语句后,city 列及其中的数据会被删除,与该列相关的表级约束也会被删除。
例 1.10 将 items 表中的 ship_price 列的数据类型修改为 INT:
alter table items modify ship_price INT;
除了可以对表中的某几列进行修改,我们还可以对表级完整性约束进行创建和删除,其语法格式如下:
ALTER TABLE <表名称>
{
ADD (CONSTRAINT<表级完整性约束>, …)
|DROP (CONSTRAINT <约束名>, …)
}
例 1.11 在 items 表中添加引用约束 FK_RELATIO_ORDERS:
alter table items add constraint foreign key (order_num) references orders (order_num) constraint FK_RELATIO_ORDERS;