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

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

在Microsoft Office Access 2007,很容易创建和修改表、 约束,以及在设计视图中的索引,并使用“关系”窗口创建关系。或者,您可以创建和修改这些相同的实体,通过在 SQL 视图中编写数据定义查询。

本文介绍数据定义查询,并演示如何使用此类查询来创建表、 索引、 约束和关系。本文还可以帮助您决定何时使用数据定义查询。

您要做什么?

了解何时使用数据定义查询

创建或修改表

创建索引

创建限制或关系

了解何时使用数据定义查询

与其他查询,不同数据定义查询不会检索数据。大多数查询中使用数据操作语言 (DML),其中包含指定如何合并和操作所需的数据结果从现有数据库对象的数据的结构化查询语言 (SQL) 命令。数据定义查询中使用数据定义语言 (DDL),其中包含指定的数据库对象存储或索引数据和控制用户访问数据库对象的 SQL 命令定义 SQL 命令。在Office Access 2007,数据定义查询定义或更改数据库对象的定义。

通常情况下,您应使用图形设计界面该Office Access 2007提供 (例如,设计视图和关系窗口) 来创建表、 约束、 索引和关系。但是,如果您有包含定期删除并重新创建表,使用这些接口可能会花费的时间。通过使用数据定义查询,您可以编写查询一次,然后运行它再次在必要时。请考虑使用数据定义查询,只有当您熟悉 SQL 语句,如果您打算删除并重新经常创建特定的表、 约束或索引。

重要: 使用数据定义查询修改数据库对象可以是风险,因为操作不伴随确认对话框。如果发生误操作,可以将丢失数据或无意中更改表格的设计。数据定义查询用于修改数据库中的对象时要小心。如果您不是负责维护您正在使用的数据库,您应该之前进行咨询与数据库管理员运行数据定义查询。此外,它是一个好的做法,以使其上的所有表的您将要运行此类查询的备份副本。

返回页首

创建或修改表

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

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

创建表命令只必需的元素是创建表命令本身、 表的名称、 至少一个字段和每个字段的数据类型。让我们来看一个简单的示例。

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

注意: 您必须先启用顺序数据定义查询以运行的数据库的内容。

  1. 消息栏上,单击选项,然后单击启用此内容

  2. “创建”选项卡上的“其他”组中,单击“查询设计”

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

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

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

  5. 键入以下 SQL 语句:

    CREATE TABLE Cars (Name TEXT(30), Year TEXT(4), Price CURRENCY)

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

修改表

要修改表,请使用 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 TABLE Cars ADD COLUMN Condition 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 语句:

    CREATE INDEX YearIndex ON Cars (Year)

  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 TABLE Cars ALTER COLUMN Condition TEXT CONSTRAINT ConditionRequired NOT NULL

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

现在假设,一段时间后您注意到应该是相同的条件字段中有多个相似的值。例如,一些汽车有的较差的条件值和其他人有错误值。清理值,以便它们更一致后,您可以创建表格,命名 CarCondition,一个字段,命名的包含您想要的汽车条件中使用的值的所有条件 ︰

  1. “创建”选项卡上的“其他”组中,单击“查询设计”

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

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

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

  4. 键入以下 SQL 语句:

    CREATE TABLE CarCondition (Condition TEXT(10))

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

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

    INSERT INTO CarCondition SELECT DISTINCT Condition FROM Cars;

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

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

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

  1. “创建”选项卡上的“其他”组中,单击“查询设计”

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

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

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

  4. 键入以下 SQL 语句:

    ALTER TABLE Cars ALTER COLUMN Condition TEXT CONSTRAINT FKeyCondition REFERENCES CarCondition (Condition)

  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}]}

让我们看一下使用汽车表的另一个示例。假设您想要确保没有汽车表中的两个记录具有相同的名称、 年、 条件和价格组值。您可以创建唯一约束,使用以下过程向这些字段中,应用 ︰

  1. “创建”选项卡上的“其他”组中,单击“查询设计”

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

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

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

  4. 键入以下 SQL 语句:

    ALTER TABLE Cars ADD CONSTRAINT NoDupes UNIQUE (name, year, condition, price)

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

返回页首

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

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

此信息是否有帮助?

谢谢您的反馈!

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

×