SQL 不仅可以用来操纵表中的数据,还可以对表本身进行操纵,包括表的创建、更改和删除。

# 1.创建表

一般有两种创建表的方法:

  1. 用可视化的管理数据库表的工具来创建。
  2. 直接用 SQL 语句来创建。 其实,在用工具创建的时候,本质上也是通过 SQL 语句来创建,只不过这些 SQL 语句是工具帮我们生成的。 创建表使用 CREATE TABLE 关键字,创建过程中,给出如下信息:
  3. 新表的名字,在关键字 CREATE TABLE 之后给出。
  4. 表列的名字和定义,用逗号分隔。

我们以 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 
);
1
2
3
4
5
6
7
8
9
10
11
12

运行结果如下: image.png

在创建新的表时,指定的表名必须不存在,否则会出错。为防止意外覆盖已有的表,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 
);
1
2
3
4
5
6
7
8

运行结果如下: image.png

在这个例子中,这一列的描述增加了 DEFAULT 1,指示 DBMS,如果不给出数量则使用数量 1。 默认值经常用于日期或时间戳列。例如,通过指定引用系统日期的函数或变量, 将系统日期用作默认日期。

在前面的课程我们提到,NULL 值就是没有值或缺值。允许 NULL 值的列允许在插入行时不给出该列的值。当指定列为 NOT NULL 时,如果有设定默认值,在插入行时,允许不给出该列的值。当指定列为 NOT NULL 时,如果没有设定默认值,在插入或更新行时,该列必须有值。如果不给出值,在插入的时候会报错。

在选择使用 DEFAULT 值还是 NULL 时,我们更倾向使用 DEFAULT 值。

# 2.更新表

在需要更新表定义时,我们可以使用 ALTER TABLE 语句。 使用 ALTER TABLE 更改表结构,必须给出下面的信息:

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

例如,我们要给 vendors 表增加一个 vend_phone 列。

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

执行前: image.png

运行结果如下: image.png

删除刚才增加的列:

ALTER TABLE Vendors 
DROP COLUMN vend_phone;
1
2

运行结果如下: image.png

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

  1. 用新的列布局创建一个新表;
  2. 使用 INSERT SELECT 语句从旧表复制数据到新表。
  3. 检验包含所需数据的新表;
  4. 重命名旧表(如果确定,可以删除它);
  5. 用旧表原来的名字重命名新表;
  6. 根据需要,重新创建触发器、存储过程、索引和外键。

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

# 3.删除表

删除表(删除整个表而不是其内容)非常简单,使用 DROP TABLE 语句 即可: 例如:删除 custcopy 表

DROP TABLE CustCopy;
1

运行结果如下: image.png

可以看到左侧区域中的 custcopy 表已经被删除。

请注意:删除表没有确认,也不能撤销,执行这条语句将永远删除该表。

这一课介绍了几条新的 SQL 语句。CREATE TABLE 用来创建新表,ALTER TABLE 用来更改表列(或其他诸如约束或索引等对象),而 DROP TABLE 用来完整地删除一个表。这些语句必须小心使用,并且应该在备份后使用。

小结: image.png

# 4.课后题

我们要给 customers 表增加一个 customers_phone 列。

更新于: 12/30/2021, 2:39:56 AM