-
SQL 表的删除(DROP TABLE)和更新(ALTER TABLE)
学习要点
使用
DROP TABLE
语句来删除表。使用
ALTER TABLE
语句向表中添加列或者从表中删除列。
一、表的删除(DROP TABLE
语句)
此前介绍的都是关于 Product
表的内容的创建,下面我们就来介绍一下删除表的方法。删除表的 SQL 语句非常简单,只需要一行 DROP TABLE
语句即可。
KEYWORD
DROP TABLE
语句
语法 3 删除表时使用的 DROP TABLE
语句
|
DROP TABLE <表名>; |
如果想要删除 Product
表,只需要像代码清单 3 那样书写 SQL 语句即可 [1]。
代码清单 3 删除 Product
表
|
DROP TABLE Product; |
DROP
在英语中是“丢掉”“舍弃”的意思。需要特别注意的是,删除的表是无法恢复的 [2]。即使是被误删的表,也无法恢复,只能重新创建,然后重新插入数据。
如果不小心删除了重要的业务表,那就太悲剧了。特别是存储了大量数据的表,恢复起来费时费力,请大家务必注意!
法则 12
删除了的表是无法恢复的。
在执行
DROP TABLE
语句之前请务必仔细确认。
二、表定义的更新(ALTER TABLE
语句)
有时好不容易把表创建出来之后才发现少了几列,其实这时无需把表删除再重新创建,只需使用变更表定义的 ALTER TABLE
语句就可以了。 ALTER
在英语中就是“改变”的意思。下面就给大家介绍该语句通常的使用方法。
KEYWORD
ALTER TABLE
语句
首先是添加列时使用的语法。
语法 4 添加列的 ALTER TABLE
语句
|
ALTER TABLE <表名> ADD COLUMN <列的定义>; |
特定的 SQL
Oracle 和 SQL Server 中不用写
COLUMN
。
ALTER TABLE <表名> ADD <列名> ;
另外,在 Oracle 中同时添加多列的时候,可以像下面这样使用括号。
ALTER TABLE <表名> ADD (<列名>,<列名>,……);
例如,我们可以使用代码清单 4 中的语句在 Product
表中添加这样一列,product_name_pinyin
(商品名称(拼音)),该列可以存储 100 位的可变长字符串。
代码清单 4 添加一列可以存储 100 位的可变长字符串的 product_name_pinyin
列
DB2 PostgreSQL MySQL
|
ALTER TABLE Product ADD COLUMN product_name_pinyin VARCHAR(100); |
Oracle
|
ALTER TABLE Product ADD (product_name_pinyin VARCHAR2(100)); |
SQL Server
|
ALTER TABLE Product ADD product_name_pinyin VARCHAR(100); |
反之,删除表中某列使用的语法如下所示。
语法 5 删除列的 ALTER TABLE
语句
|
ALTER TABLE <表名> DROP COLUMN <列名>; |
特定的 SQL
Oracle 中不用写
COLUMN
。
ALTER TABLE <表名> DROP <列名> ;
另外,在 Oracle 中同时删除多列的时候,可以像下面这样使用括号来实现。
ALTER TABLE <表名> DROP (<列名>,<列名>,……);
例如,我们可以使用代码清单 5 中的语句来删除之前添加的 product_name_pinyin
列。
代码清单 5 删除 product_name_pinyin
列
SQL Server DB2 PostgreSQL MySQL
|
ALTER TABLE Product DROP COLUMN product_name_pinyin; |
Oracle
|
ALTER TABLE Product DROP (product_name_pinyin); |
ALTER TABLE
语句和 DROP TABLE
语句一样,执行之后无法恢复。误添的列可以通过 ALTER TABLE
语句删除,或者将表全部删除之后重新再创建。
法则 13
表定义变更之后无法恢复。
在执行
ALTER TABLE
语句之前请务必仔细确认。
三、向 Product
表中插入数据
最后让我们来尝试一下向表中插入数据。从下一章开始,大家将会使用插入到 Product
表中的数据,来学习如何编写操作数据的 SQL 语句。
向 Product
表中插入数据的 SQL 语句如代码清单 6 所示。
代码清单 6 向 Product
表中插入数据的 SQL 语句
SQL Server PostgreSQL
|
-- DML :插入数据 |
|
BEGIN TRANSACTION;------------------① |
|
|
|
INSERT INTO Product VALUES ('0001', 'T恤衫', '衣服', 1000, 500, '2009-09-20'); |
|
INSERT INTO Product VALUES ('0002', '打孔器', '办公用品', 500, 320, '2009-09-11'); |
|
INSERT INTO Product VALUES ('0003', '运动T恤', '衣服', 4000, 2800, NULL); |
|
INSERT INTO Product VALUES ('0004', '菜刀', '厨房用具', 3000, 2800, '2009-09-20'); |
|
INSERT INTO Product VALUES ('0005', '高压锅', '厨房用具', 6800, 5000, '2009-01-15'); |
|
INSERT INTO Product VALUES ('0006', '叉子', '厨房用具', 500, NULL, '2009-09-20'); |
|
INSERT INTO Product VALUES ('0007', '擦菜板', '厨房用具', 880, 790, '2008-04-28'); |
|
INSERT INTO Product VALUES ('0008', '圆珠笔', '办公用品', 100, NULL,'2009-11-11'); |
|
|
|
COMMIT; |
特定的 SQL
DBMS 不同,代码清单 6 中的 DML 语句也略有不同。
在 MySQL 中运行时,需要把 ① 中的
BEGIN TRANSACTION;
改写成
START TRANSACTION;
在 Oracle 和 DB2 中运行时,无需使用 ① 中的
BEGIN TRANSACTION;
(请予以删除)。这些在不同的 DBMS 中使用的 DML 语句,可以从这里下载。
使用插入行的指令语句 INSERT
,就可以把表 2 中的数据都插入到表中了。开头的 BEGIN TRANSACTION
语句是开始插入行的指令语句,结尾的 COMMIT
语句是确定插入行的指令语句。这些指令语句将会在 数据的插入 中详细介绍,大家不必急于记住这些语句。
专栏
表的修改
本节将名为
Product
的表作为例子进行了讲解,估计会有些读者在匆忙中把表名误写成了Poduct
,创建出了名称错误的表,这可怎么办呢?如果还没有向表中插入数据,那么只需要把表删除,再重新创建一个名称正确的表就可以了。可是如果在发现表名错误之前就已经向表中插入了大量数据,再这样做就麻烦了。毕竟插入大量的数据既费时又费力。抑或起初决定好的表名,之后又觉得不好想换掉,这种情况也很麻烦。
其实很多数据库都提供了可以修改表名的指令(
RENAME
)来解决这样的问题。例如,如果想把Poduct
表的名称变为Product
,可以使用代码清单 A 中的指令。KEYWORD
RENAME
代码清单 A 变更表名
Oracle PostgreSQL
ALTER TABLE Poduct RENAME TO Product;
DB2
RENAME TABLE Poduct TO Product;
SQL Server
sp_rename 'Poduct', 'Product';
MySQL
RENAME TABLE Poduct to Product;
通常在
RENAME
之后按照 <变更前的名称>、<变更后的名称> 的顺序来指定表的名称。各个数据库的语法都不尽相同,是因为标准 SQL 并没有
RENAME
,于是各个数据库便使用了各自惯用的语法。如上所述,在创建了错误的表名,或者想要保存表的备份时,使用这些语句非常方便。但美中不足的是,由于各个数据库的语法不同,很难一下子想出恰当的指令。这时大家就可以来参考本专栏。
请参阅
- 数据库是什么
- 数据库的结构
- SQL 概要
- 表的创建
- 表的删除和更新
(完)
-
随后还需使用
Product
表来学习相关知识,请不要删除Product
表。如果已经删除,请重新创建Product
表。 ↩︎ -
其实很多 RDBMS 都预留了恢复的功能,但还是请大家认为是无法恢复的。 ↩︎