使用数据定义查询创建或修改表或索引

重要:  本文是由机器翻译的,请参阅免责声明。请在 此处 中查找本文的英文版本以便参考。

可以通过在 SQL 视图中编写数据定义查询来创建和修改表、限制、索引和关系。

本文介绍了数据定义查询,以及如何使用此类查询创建表、限制、索引及关系。本文还可以帮助您决定何时使用数据定义查询。

注意: 在 Web 数据库中无法使用这些过程。

本文内容

概述

创建或修改表

创建索引

创建一个约束或关系

概述

和其他查询不同,数据定义查询不检索数据,而是使用数据定义语言创建、修改或删除数据库对象。

注意: 数据定义语言 (DDL) 属于结构化查询语言 (SQL)。

数据定义查询非常方便,只需运行几次查询即可定期删除和重新创建您的部分数据库架构。如果您熟悉 SQL 语句并计划删除和重新创建特殊的表、限制、索引或关系,可以考虑使用数据定义查询。

警告: 使用数据定义查询来修改数据库对象可能会有风险,因为完成操作时并不出现确认对话框。如果操作出错,可能造成数据丢失或意外更改表的设计。使用数据定义查询来修改数据库中的对象时要格外小心。如果您所使用的数据库不是由您来负责维护的,应当在运行数据定义查询之前咨询数据库的管理员。

重要: 在运行数据定义查询之前,请备份所有相关的表。

DDL 关键字

关键字

用途

CREATE

创建一个尚不存在的索引或表。

ALTER

修改现有的表或列。

DROP

删除现有的表、列或限制。

ADD

向表中添加列或限制。

COLUMN

与 ADD、ALTER 或 DROP 配合使用

CONSTRAINT

与 ADD、ALTER 或 DROP 配合使用

INDEX

与 CREATE 配合使用

TABLE

与 ALTER、CREATE 或 DROP 配合使用

返回页首

创建或修改表

要创建表,可以使用 CREATE TABLE 命令。CREATE TABLE 命令的语法如下:

CREATE TABLE table_name 
(field1 type [(size)] [NOT NULL] [index1]
[, field2 type [(size)] [NOT NULL] [index2]
[, ...][, CONSTRAINT constraint1 [, ...]])

CREATE TABLE 命令的必要元素只有 CREATE TABLE 命令本身和表名称,但通常需要定义表的某些字段或其他部分。请考虑下面的简单示例。

假设您要创建表来存储正在打算购买的二手车的名称、年份及价格。名称最多包含 30 个字符,年份最多包含 4 个字符。要使用数据定义查询创建表,操作如下:

注意: 可能需要先启用数据库的内容,然后才能运行数据定义查询:

  • 在消息栏中,单击“启用内容”

创建表格

  1. “创建”选项卡上的“宏与代码”组中,单击“查询设计”

  2. 关闭“显示表”对话框。

  3. “设计”选项卡上的“查询类型”组中,单击“数据定义”

    将隐藏设计网格并显示 SQL 视图对象选项卡。

  4. 键入以下 SQL 语句:

    创建表汽车 (名称 TEXT(30),年 TEXT(4),价格货币)

  5. “设计”选项卡上的“结果”组中,单击“运行”

修改表

要修改表,请使用 ALTER TABLE 命令。使用 ALTER TABLE 命令可添加、修改或删除列或限制。ALTER TABLE 命令的语法如下:

ALTER TABLE table_name predicate

其中谓词可以是下列操作之一︰

ADD COLUMN field type[(size)] [NOT NULL] [CONSTRAINT constraint]

ADD CONSTRAINT multifield_constraint

ALTER COLUMN field type[(size)]

DROP COLUMN field

DROP CONSTRAINT constraint

假设您要添加 10 个字符的文本字段来存储有关每辆车的状况信息。您可以执行下列操作:

  1. “创建”选项卡上的“宏与代码”组中,单击“查询设计”

  2. 关闭“显示表”对话框。

  3. “设计”选项卡上的“查询类型”组中,单击“数据定义”

    将隐藏设计网格并显示 SQL 视图对象选项卡。

  4. 键入以下 SQL 语句:

    ALTER 表汽车添加列条件 TEXT(10)

  5. “设计”选项卡上的“结果”组中,单击“运行”

返回页首

创建索引

要对现有表创建索引,可以使用 CREATE INDEX 命令。CREATE INDEX 命令的语法如下:

CREATE [UNIQUE] INDEX index_name
ON table (field1 [DESC][, field2 [DESC], ...])
[WITH {PRIMARY | DISALLOW NULL | IGNORE NULL}]

必需的元素只有 CREATE INDEX 命令、索引的名称、ON 参数、包含要编入索引的字段的表名称,以及要包含在索引中的字段列表。

  • DESC 参数使索引按降序创建,在您经常运行查找索引字段高值的查询或按降序对索引的字段进行排序时,这非常有用。默认情况下,索引按升序创建。

  • 与主参数为表主键建立索引的字段。

  • WITH DISALLOW NULL 参数使索引要求对索引的字段输入值,即不允许为空值。 

假设您有一个名称为 Cars 的表,其中的字段用于存储您打算购买的二手车的名称、年份、价格和状况。另外假设该表变得很大,您经常在查询中包含年份字段。您可以使用以下过程对年份字段创建一个索引,以帮助查询更快地返回结果:

  1. “创建”选项卡上的“宏与代码”组中,单击“查询设计”

  2. 关闭“显示表”对话框。

  3. “设计”选项卡上的“查询类型”组中,单击“数据定义”

    将隐藏设计网格并显示 SQL 视图对象选项卡。

  4. 键入以下 SQL 语句:

    创建索引 YearIndex 开汽车 (年)

  5. “设计”选项卡上的“结果”组中,单击“运行”

返回页首

创建限制或关系

限制建立了当插入值时字段或字段组合必须满足的逻辑条件。例如,UNIQUE 限制禁止受限制的字段接受与该字段的现有值相同的值。

关系是一种限制,它引用另一个表中的字段或字段组合的值,以确定某个值是否可以插入受限制的字段或字段组合中。您不需要使用特殊的关键字来表明限制是一种关系。

要创建限制,请在“CREATE TABLE”或“ALTER TABLE”命令中使用 CONSTRAINT 子句。有两种 CONSTRAINT 子句:一种用于对单个字段创建限制,另一种用于对多个字段创建限制。

单个字段限制

单个字段 CONSTRAINT 子句紧跟在它所限制的字段定义之后,其语法如下:

CONSTRAINT constraint_name {PRIMARY KEY | UNIQUE | NOT NULL |
REFERENCES foreign_table [(foreign_field)]
[ON UPDATE {CASCADE | SET NULL}]
[ON DELETE {CASCADE | SET NULL}]}

假设您有一个名称为 Cars 的表,其中的字段用于存储您打算购买的二手车的名称、年份、价格和状况。另外假设您经常忘记输入汽车状况的值,并且始终需要记录此信息。您可以使用以下过程对 Condition 字段创建一个限制,以防止您将该字段保持为空:

  1. “创建”选项卡上的“宏与代码”组中,单击“查询设计”

  2. 关闭“显示表”对话框。

  3. “设计”选项卡上的“查询类型”组中,单击“数据定义”

    将隐藏设计网格并显示 SQL 视图对象选项卡。

  4. 键入以下 SQL 语句:

    ALTER 表汽车 ALTER 列条件文本限制 ConditionRequired 不为空

  5. “设计”选项卡上的“结果”组中,单击“运行”

现在假设稍后您注意到 Condition 字段中存在许多相似的值,而这些值应该是相同的。例如,一些汽车的 Condition 值为 poor,其他汽车的值为 bad

注意: 如果想要接着执行剩余的过程,请向您在上述步骤中创建的 Cars 表中添加一些伪造数据。

当清除这些值以便它们更加一致后,您可以创建一个名为 CarCondition 的表,其中有一个名为 Condition 的字段,该字段包含您要对汽车状况使用的所有值:

  1. “创建”选项卡上的“宏与代码”组中,单击“查询设计”

  2. 关闭“显示表”对话框。

  3. “设计”选项卡上的“查询类型”组中,单击“数据定义”

    将隐藏设计网格并显示 SQL 视图对象选项卡。

  4. 键入以下 SQL 语句:

    创建表 CarCondition (条件 TEXT(10))

  5. “设计”选项卡上的“结果”组中,单击“运行”

  6. 使用 ALTER TABLE 语句为该表创建一个主键:

    更改表 CarCondition ALTER 列条件文本限制 CarConditionPK 主键

  7. 要将 Cars 表的 Condition 字段中的值插入到新的 CarCondition 表中,请在 SQL 视图对象选项卡中键入以下 SQL 语句:

    插入到 CarCondition 选择 DISTINCT 从汽车; 条件

    注意: 在此步骤中的 SQL 语句是追加查询。与数据定义查询,以分号结尾追加查询。

  8. “设计”选项卡上的“结果”组中,单击“运行”

使用限制创建关系

为了要求在 Cars 表的 Condition 字段中输入的值与 CarCondition 表的 Condition 字段的值相匹配,您可以使用以下过程在名为 Condition 字段中创建 CarCondition 与 Cars 之间的关系:

  1. “创建”选项卡上的“宏与代码”组中,单击“查询设计”

  2. 关闭“显示表”对话框。

  3. “设计”选项卡上的“查询类型”组中,单击“数据定义”

    将隐藏设计网格并显示 SQL 视图对象选项卡。

  4. 键入以下 SQL 语句:

    ALTER 表汽车 ALTER 列条件文本限制 FKeyCondition 引用 CarCondition (条件)

  5. “设计”选项卡上的“结果”组中,单击“运行”

多字段限制

多字段 CONSTRAINT 子句只能在字段定义子句之外使用,其语法如下:

CONSTRAINT constraint_name 
{PRIMARY KEY (pk_field1[, pk_field2[, ...]]) |
UNIQUE (unique1[, unique2[, ...]]) |
NOT NULL (notnull1[, notnull2[, ...]]) |
FOREIGN KEY [NO INDEX] (ref_field1[, ref_field2[, ...]])
REFERENCES foreign_table
[(fk_field1[, fk_field2[, ...]])] |
[ON UPDATE {CASCADE | SET NULL}]
[ON DELETE {CASCADE | SET NULL}]}

请考虑使用 Cars 表的另一个示例。假设您要确保 Cars 表中不会出现其名称、年份、状况和价格的值都相同的两条记录。您可以使用下面的过程创建应用于这些字段的 UNIQUE 限制:

  1. “创建”选项卡上的“宏与代码”组中,单击“查询设计”

  2. 关闭“显示表”对话框。

  3. “设计”选项卡上的“查询类型”组中,单击“数据定义”

    将隐藏设计网格并显示 SQL 视图对象选项卡。

  4. 键入以下 SQL 语句:

    更改表汽车添加约束 NoDupes 唯一 (名称、 年、 条件、 价格)

  5. “设计”选项卡上的“结果”组中,单击“运行”

返回页首

注意: 机器翻译免责声明:本文是由无人工介入的计算机系统翻译的。Microsoft 提供机器翻译是为了帮助非英语国家/地区用户方便阅读有关 Microsoft 产品、服务和技术的内容。由于机器翻译的原因,本文可能包含词汇、语法或文法方面的错误。

扩展你的技能
了解培训
抢先获得新功能
加入 Office 预览体验计划

此信息是否有帮助?

谢谢您的反馈!

谢谢你的反馈! 可能需要转接到 Office 支持专员。

×