SQL 入门教程:更新表(ALTER TABLE)

本文内容

目录汇总:SQL 零基础入门教程

更新表定义,可以使用 ALTER TABLE 语句。虽然所有的 DBMS 都支持 ALTER TABLE,但它们所允许更新的内容差别很大。以下是使用 ALTER TABLE 时需要考虑的事情。

  • 理想情况下,不要在表中包含数据时对其进行更新。应该在表的设计过程中充分考虑未来可能的需求,避免今后对表的结构做大改动。
  • 所有的 DBMS 都允许给现有的表增加列,不过对所增加列的数据类型(以及 NULLDEFAULT 的使用)有所限制。
  • 许多 DBMS 不允许删除或更改表中的列。
  • 多数 DBMS 允许重新命名表中的列。
  • 许多 DBMS 限制对已经填有数据的列进行更改,对未填有数据的列几乎没有限制。

可以看出,对已有表做更改既复杂又不统一。对表的结构能进行何种更改,请参阅具体的 DBMS 文档。

使用 ALTER TABLE 更改表结构,必须给出下面的信息:

  • ALTER TABLE 之后给出要更改的表名(该表必须存在,否则将出错);
  • 列出要做哪些更改。

因为给已有表增加列可能是所有 DBMS 都支持的唯一操作,所以我们举个这样的例子:

输入▼

1
2
ALTER TABLE Vendors
ADD vend_phone CHAR(20);

分析▼

这条语句给 Vendors 表增加一个名为 vend_phone 的列,其数据类型为 CHAR

更改或删除列、增加约束或增加键,这些操作也使用类似的语法。

注意,下面的例子并非对所有 DBMS 都有效:

输入▼

1
2
ALTER TABLE Vendors
DROP COLUMN vend_phone;

复杂的表结构更改一般需要手动删除过程,它涉及以下步骤:

(1) 用新的列布局创建一个新表;

(2) 使用 INSERT SELECT 语句(关于这条语句的详细介绍,请参阅 从一个表复制到另一个表)从旧表复制数据到新表。有必要的话,可以使用转换函数和计算字段;

(3) 检验包含所需数据的新表;

(4) 重命名旧表(如果确定,可以删除它);

(5) 用旧表原来的名字重命名新表;

(6) 根据需要,重新创建 触发器存储过程索引外键

说明:ALTER TABLE 和 SQLite

SQLite 对使用 ALTER TABLE 执行的操作有所限制。最重要的一个限制是,它不支持使用 ALTER TABLE 定义主键和外键,这些必须在最初创建表时指定。

注意:小心使用 ALTER TABLE

使用 ALTER TABLE 要极为小心,应该在进行改动前做完整的备份(表结构和数据的备份)。数据库表的更改不能撤销,如果增加了不需要的列,也许无法删除它们。类似地,如果删除了不应该删除的列,可能会丢失该列中的所有数据。

请参阅

(完)

comments powered by Disqus

本文内容