SQL 不仅可以用来操纵表中的数据,还可以对表本身进行操纵,包括表的创建、更改和删除。
# 1.创建表
一般有两种创建表的方法:
- 用可视化的管理数据库表的工具来创建。
- 直接用 SQL 语句来创建。 其实,在用工具创建的时候,本质上也是通过 SQL 语句来创建,只不过这些 SQL 语句是工具帮我们生成的。 创建表使用 CREATE TABLE 关键字,创建过程中,给出如下信息:
- 新表的名字,在关键字 CREATE TABLE 之后给出。
- 表列的名字和定义,用逗号分隔。
我们以 customers_test 表的创建为例,创建语句如下:
CREATE TABLE customers_test
(
cust_id char(10) NOT NULL ,
cust_name char(50) NOT NULL ,
cust_address char(50) NULL ,
cust_city char(50) NULL ,
cust_state char(5) NULL ,
cust_zip char(10) NULL ,
cust_country char(50) NULL ,
cust_contact char(50) NULL ,
cust_email char(255) NULL
);
2
3
4
5
6
7
8
9
10
11
12
运行结果如下:
在创建新的表时,指定的表名必须不存在,否则会出错。为防止意外覆盖已有的表,SQL 要求首先手工删除该表,然后再重建它,而不是简单的用创建表语句覆盖它。 每个表列要么是 NULL 列,要么是 NOT NULL 列。当我们不明确指定 NULL 或 NOT NULL 时,默认为 NULL。 SQL 允许指定默认值,在插入行时如果不给出值,DBMS 将自动采用默认值。默认值在 CREATE TABLE 语句的列定义中用关键字 DEFAULT 指定。 例如:
CREATE TABLE orderitems_test
(
order_num int NOT NULL ,
order_item int NOT NULL ,
prod_id char(10) NOT NULL ,
quantity int NOT NULL DEFAULT 1,
item_price decimal(8,2) NOT NULL
);
2
3
4
5
6
7
8
运行结果如下:
在这个例子中,这一列的描述增加了 DEFAULT 1,指示 DBMS,如果不给出数量则使用数量 1。 默认值经常用于日期或时间戳列。例如,通过指定引用系统日期的函数或变量, 将系统日期用作默认日期。
在前面的课程我们提到,NULL 值就是没有值或缺值。允许 NULL 值的列允许在插入行时不给出该列的值。当指定列为 NOT NULL 时,如果有设定默认值,在插入行时,允许不给出该列的值。当指定列为 NOT NULL 时,如果没有设定默认值,在插入或更新行时,该列必须有值。如果不给出值,在插入的时候会报错。
在选择使用 DEFAULT 值还是 NULL 时,我们更倾向使用 DEFAULT 值。
# 2.更新表
在需要更新表定义时,我们可以使用 ALTER TABLE 语句。 使用 ALTER TABLE 更改表结构,必须给出下面的信息:
- 在 ALTER TABLE 之后给出要更改的表名(该表必须存在,否则将出错);
- 列出要做哪些更改。
例如,我们要给 vendors 表增加一个 vend_phone 列。
ALTER TABLE Vendors
ADD vend_phone CHAR(20);
2
执行前:
运行结果如下:
删除刚才增加的列:
ALTER TABLE Vendors
DROP COLUMN vend_phone;
2
运行结果如下:
复杂的表结构更改一般需要手动删除过程,它涉及以下步骤:
- 用新的列布局创建一个新表;
- 使用 INSERT SELECT 语句从旧表复制数据到新表。
- 检验包含所需数据的新表;
- 重命名旧表(如果确定,可以删除它);
- 用旧表原来的名字重命名新表;
- 根据需要,重新创建触发器、存储过程、索引和外键。
使用 ALTER TABLE 要极为小心,应该在进行改动前做完整的备份(表结构和数据的备份)。数据库表的更改不能撤销,如果增加了不需要的列,也许无法删除它们。类似地,如果删除了不应该删除的列,可能会丢失该列中的所有数据。
# 3.删除表
删除表(删除整个表而不是其内容)非常简单,使用 DROP TABLE 语句 即可: 例如:删除 custcopy 表
DROP TABLE CustCopy;
运行结果如下:
可以看到左侧区域中的 custcopy 表已经被删除。
请注意:删除表没有确认,也不能撤销,执行这条语句将永远删除该表。
这一课介绍了几条新的 SQL 语句。CREATE TABLE 用来创建新表,ALTER TABLE 用来更改表列(或其他诸如约束或索引等对象),而 DROP TABLE 用来完整地删除一个表。这些语句必须小心使用,并且应该在备份后使用。
小结:
# 4.课后题
我们要给 customers 表增加一个 customers_phone 列。