使用數(shù)據(jù)定義查詢創(chuàng)建或修改表或索引

此頁(yè)沒(méi)有內(nèi)容條目
內(nèi)容

Access > 設(shè)計(jì)應(yīng)用程序

 

使用數(shù)據(jù)定義查詢創(chuàng)建或修改表或索引

blueup_CLV全部顯示

bluedrop_CLV全部隱藏

可以通過(guò)在 SQL 視圖中編寫(xiě)數(shù)據(jù)定義查詢來(lái)創(chuàng)建和修改表、限制、索引和關(guān)系。

本文介紹了數(shù)據(jù)定義查詢,以及如何使用此類查詢創(chuàng)建表、限制、索引及關(guān)系。本文還可以幫助您決定何時(shí)使用數(shù)據(jù)定義查詢。

 注釋    在 Web 數(shù)據(jù)庫(kù)中無(wú)法使用這些過(guò)程。

本文內(nèi)容


hrefIcon_ZA10069439 概述

hrefIcon_ZA10069439 創(chuàng)建或修改表

hrefIcon_ZA10069439 創(chuàng)建索引

hrefIcon_ZA10069439 創(chuàng)建限制或關(guān)系


概述

和其他查詢不同,數(shù)據(jù)定義查詢不檢索數(shù)據(jù),而是使用數(shù)據(jù)定義語(yǔ)言創(chuàng)建、修改或刪除數(shù)據(jù)庫(kù)對(duì)象。

 注釋    數(shù)據(jù)定義語(yǔ)言 (DDL) 屬于結(jié)構(gòu)化查詢語(yǔ)言 (SQL)。

數(shù)據(jù)定義查詢非常方便,只需運(yùn)行幾次查詢即可定期刪除和重新創(chuàng)建您的部分?jǐn)?shù)據(jù)庫(kù)架構(gòu)。如果您熟悉 SQL 語(yǔ)句并計(jì)劃刪除和重新創(chuàng)建特殊的表、限制、索引或關(guān)系,可以考慮使用數(shù)據(jù)定義查詢。

警告  使用數(shù)據(jù)定義查詢來(lái)修改數(shù)據(jù)庫(kù)對(duì)象可能會(huì)有風(fēng)險(xiǎn),因?yàn)橥瓿刹僮鲿r(shí)并不出現(xiàn)確認(rèn)對(duì)話框。如果操作出錯(cuò),可能造成數(shù)據(jù)丟失或意外更改表的設(shè)計(jì)。使用數(shù)據(jù)定義查詢來(lái)修改數(shù)據(jù)庫(kù)中的對(duì)象時(shí)要格外小心。如果您所使用的數(shù)據(jù)庫(kù)不是由您來(lái)負(fù)責(zé)維護(hù)的,應(yīng)當(dāng)在運(yùn)行數(shù)據(jù)定義查詢之前咨詢數(shù)據(jù)庫(kù)的管理員。

要點(diǎn)  在運(yùn)行數(shù)據(jù)定義查詢之前,請(qǐng)備份所有相關(guān)的表。

DDL 關(guān)鍵字

關(guān)鍵字

用途

CREATE

創(chuàng)建一個(gè)尚不存在的索引或表。

ALTER

修改現(xiàn)有的表或列。

DROP

刪除現(xiàn)有的表、列或限制。

ADD

向表中添加列或限制。

COLUMN

與 ADD、ALTER 或 DROP 配合使用

CONSTRAINT

與 ADD、ALTER 或 DROP 配合使用

INDEX

與 CREATE 配合使用

TABLE

與 ALTER、CREATE 或 DROP 配合使用

TopPageIcon_CLV 返回頁(yè)首

創(chuàng)建或修改表

要?jiǎng)?chuàng)建表,可以使用 CREATE TABLE 命令。CREATE TABLE 命令的語(yǔ)法如下:

CREATE TABLE table_name

 (field1 type [(size)] [NOT NULL] [index1]

 [, field2 type [(size)] [NOT NULL] [index2]

 [, ...][, CONSTRAINT constraint1 [, ...]])

CREATE TABLE 命令的必要元素只有 CREATE TABLE 命令本身和表名稱,但通常需要定義表的某些字段或其他部分。請(qǐng)考慮下面的簡(jiǎn)單示例。

假設(shè)您要?jiǎng)?chuàng)建表來(lái)存儲(chǔ)正在打算購(gòu)買的二手車的名稱、年份及價(jià)格。名稱最多包含 30 個(gè)字符,年份最多包含 4 個(gè)字符。要使用數(shù)據(jù)定義查詢創(chuàng)建表,操作如下:

 注釋    可能需要先啟用數(shù)據(jù)庫(kù)的內(nèi)容,然后才能運(yùn)行數(shù)據(jù)定義查詢:

在消息欄中,單擊“啟用內(nèi)容”。

創(chuàng)建表格

1.“創(chuàng)建”選項(xiàng)卡上的“宏與代碼”組中,單擊“查詢?cè)O(shè)計(jì)”
2.關(guān)閉“顯示表”對(duì)話框。
3.“設(shè)計(jì)”選項(xiàng)卡上的“查詢類型”組中,單擊“數(shù)據(jù)定義”。

將隱藏設(shè)計(jì)網(wǎng)格并顯示 SQL 視圖對(duì)象選項(xiàng)卡。

4.鍵入以下 SQL 語(yǔ)句:

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

5.“設(shè)計(jì)”選項(xiàng)卡上的“結(jié)果”組中,單擊“運(yùn)行”。

修改表

要修改表,請(qǐng)使用 ALTER TABLE 命令。使用 ALTER TABLE 命令可添加、修改或刪除列或限制。ALTER TABLE 命令的語(yǔ)法如下:

ALTER TABLE table_name predicate

其中 predicate 可以是下列任意一項(xiàng):

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

ADD CONSTRAINT multifield_constraint

ALTER COLUMN field type[(size)]

DROP COLUMN field

DROP CONSTRAINT constraint

假設(shè)您要添加 10 個(gè)字符的文本字段來(lái)存儲(chǔ)有關(guān)每輛車的狀況信息。您可以執(zhí)行下列操作:

1.“創(chuàng)建”選項(xiàng)卡上的“宏與代碼”組中,單擊“查詢?cè)O(shè)計(jì)”。
2.關(guān)閉“顯示表”對(duì)話框。
3.“設(shè)計(jì)”選項(xiàng)卡上的“查詢類型”組中,單擊“數(shù)據(jù)定義”

將隱藏設(shè)計(jì)網(wǎng)格并顯示 SQL 視圖對(duì)象選項(xiàng)卡。

4.鍵入以下 SQL 語(yǔ)句:

ALTER TABLE Cars ADD COLUMN Condition TEXT(10)

5.“設(shè)計(jì)”選項(xiàng)卡上的“結(jié)果”組中,單擊“運(yùn)行”。

TopPageIcon_CLV 返回頁(yè)首

創(chuàng)建索引

要對(duì)現(xiàn)有表創(chuàng)建索引,可以使用 CREATE INDEX 命令。CREATE INDEX 命令的語(yǔ)法如下:

CREATE [UNIQUE] INDEX index_name

 ON table (field1 [DESC][, field2 [DESC], ...])

 [WITH {PRIMARY | DISALLOW NULL | IGNORE NULL}]

必需的元素只有 CREATE INDEX 命令、索引的名稱、ON 參數(shù)、包含要編入索引的字段的表名稱,以及要包含在索引中的字段列表。

DESC 參數(shù)使索引按降序創(chuàng)建,在您經(jīng)常運(yùn)行查找索引字段高值的查詢或按降序?qū)λ饕淖侄芜M(jìn)行排序時(shí),這非常有用。默認(rèn)情況下,索引按升序創(chuàng)建。
WITH PRIMARY 參數(shù)將索引的字段作為表的主鍵 (主鍵:具有唯一標(biāo)識(shí)表中每條記錄的值的一個(gè)或多個(gè)域(列)。主鍵不允許為 NULL,并且必須始終具有唯一索引。主鍵用來(lái)將表與其他表中的外鍵相關(guān)聯(lián)。)。
WITH DISALLOW NULL 參數(shù)使索引要求對(duì)索引的字段輸入值,即不允許為空值。

假設(shè)您有一個(gè)名稱為 Cars 的表,其中的字段用于存儲(chǔ)您打算購(gòu)買的二手車的名稱、年份、價(jià)格和狀況。另外假設(shè)該表變得很大,您經(jīng)常在查詢中包含年份字段。您可以使用以下過(guò)程對(duì)年份字段創(chuàng)建一個(gè)索引,以幫助查詢更快地返回結(jié)果:

1.“創(chuàng)建”選項(xiàng)卡上的“宏與代碼”組中,單擊“查詢?cè)O(shè)計(jì)”
2.關(guān)閉“顯示表”對(duì)話框。
3.“設(shè)計(jì)”選項(xiàng)卡上的“查詢類型”組中,單擊“數(shù)據(jù)定義”

將隱藏設(shè)計(jì)網(wǎng)格并顯示 SQL 視圖對(duì)象選項(xiàng)卡。

4.鍵入以下 SQL 語(yǔ)句:

CREATE INDEX YearIndex ON Cars (Year)

5.“設(shè)計(jì)”選項(xiàng)卡上的“結(jié)果”組中,單擊“運(yùn)行”。

TopPageIcon_CLV 返回頁(yè)首

創(chuàng)建限制或關(guān)系

限制建立了當(dāng)插入值時(shí)字段或字段組合必須滿足的邏輯條件。例如,UNIQUE 限制禁止受限制的字段接受與該字段的現(xiàn)有值相同的值。

關(guān)系是一種限制,它引用另一個(gè)表中的字段或字段組合的值,以確定某個(gè)值是否可以插入受限制的字段或字段組合中。您不需要使用特殊的關(guān)鍵字來(lái)表明限制是一種關(guān)系。

要?jiǎng)?chuàng)建限制,請(qǐng)?jiān)凇癈REATE TABLE”或“ALTER TABLE”命令中使用 CONSTRAINT 子句。有兩種 CONSTRAINT 子句:一種用于對(duì)單個(gè)字段創(chuàng)建限制,另一種用于對(duì)多個(gè)字段創(chuàng)建限制。

單個(gè)字段限制

單個(gè)字段 CONSTRAINT 子句緊跟在它所限制的字段定義之后,其語(yǔ)法如下:

CONSTRAINT constraint_name {PRIMARY KEY | UNIQUE |

 NOT NULL | REFERENCES foreign_table [(foreign_field)]

 [ON UPDATE {CASCADE | SET NULL}]

 [ON DELETE {CASCADE | SET NULL}]}

假設(shè)您有一個(gè)名稱為 Cars 的表,其中的字段用于存儲(chǔ)您打算購(gòu)買的二手車的名稱、年份、價(jià)格和狀況。另外假設(shè)您經(jīng)常忘記輸入汽車狀況的值,并且始終需要記錄此信息。您可以使用以下過(guò)程對(duì) Condition 字段創(chuàng)建一個(gè)限制,以防止您將該字段保持為空:

1.“創(chuàng)建”選項(xiàng)卡上的“宏與代碼”組中,單擊“查詢?cè)O(shè)計(jì)”
2.關(guān)閉“顯示表”對(duì)話框。
3.“設(shè)計(jì)”選項(xiàng)卡上的“查詢類型”組中,單擊“數(shù)據(jù)定義”。

將隱藏設(shè)計(jì)網(wǎng)格并顯示 SQL 視圖對(duì)象選項(xiàng)卡。

4.鍵入以下 SQL 語(yǔ)句:

ALTER TABLE Cars ALTER COLUMN Condition TEXT CONSTRAINT ConditionRequired NOT NULL

5.“設(shè)計(jì)”選項(xiàng)卡上的“結(jié)果”組中,單擊“運(yùn)行”。

現(xiàn)在假設(shè)稍后您注意到 Condition 字段中存在許多相似的值,而這些值應(yīng)該是相同的。例如,一些汽車的 Condition 值為 poor,其他汽車的值為 bad。

 注釋    如果想要接著執(zhí)行剩余的過(guò)程,請(qǐng)向您在上述步驟中創(chuàng)建的 Cars 表中添加一些偽造數(shù)據(jù)。

當(dāng)清除這些值以便它們更加一致后,您可以創(chuàng)建一個(gè)名為 CarCondition 的表,其中有一個(gè)名為 Condition 的字段,該字段包含您要對(duì)汽車狀況使用的所有值:

1.“創(chuàng)建”選項(xiàng)卡上的“宏與代碼”組中,單擊“查詢?cè)O(shè)計(jì)”。
2.關(guān)閉“顯示表”對(duì)話框。
3.“設(shè)計(jì)”選項(xiàng)卡上的“查詢類型”組中,單擊“數(shù)據(jù)定義”。

將隱藏設(shè)計(jì)網(wǎng)格并顯示 SQL 視圖對(duì)象選項(xiàng)卡。

4.鍵入以下 SQL 語(yǔ)句:

CREATE TABLE CarCondition (Condition TEXT(10))

5.“設(shè)計(jì)”選項(xiàng)卡上的“結(jié)果”組中,單擊“運(yùn)行”。
6.使用 ALTER TABLE 語(yǔ)句為該表創(chuàng)建一個(gè)主鍵:

ALTER TABLE CarCondition ALTER COLUMN Condition TEXT CONSTRAINT CarConditionPK PRIMARY KEY

7.要將 Cars 表的 Condition 字段中的值插入到新的 CarCondition 表中,請(qǐng)?jiān)?SQL 視圖對(duì)象選項(xiàng)卡中鍵入以下 SQL 語(yǔ)句:

INSERT INTO CarCondition SELECT DISTINCT Condition FROM Cars;

 注釋    此步驟中的 SQL 語(yǔ)句是一個(gè)追加查詢 (追加查詢:一種動(dòng)作查詢,它將查詢結(jié)果集內(nèi)的記錄添加到現(xiàn)有表的尾部。)。與數(shù)據(jù)定義查詢不同,追加查詢以分號(hào)結(jié)尾。

8.“設(shè)計(jì)”選項(xiàng)卡上的“結(jié)果”組中,單擊“運(yùn)行”。

使用限制創(chuàng)建關(guān)系

為了要求在 Cars 表的 Condition 字段中輸入的值與 CarCondition 表的 Condition 字段的值相匹配,您可以使用以下過(guò)程在名為 Condition 字段中創(chuàng)建 CarCondition 與 Cars 之間的關(guān)系:

1.“創(chuàng)建”選項(xiàng)卡上的“宏與代碼”組中,單擊“查詢?cè)O(shè)計(jì)”
2.關(guān)閉“顯示表”對(duì)話框。
3.“設(shè)計(jì)”選項(xiàng)卡上的“查詢類型”組中,單擊“數(shù)據(jù)定義”。

將隱藏設(shè)計(jì)網(wǎng)格并顯示 SQL 視圖對(duì)象選項(xiàng)卡。

4.鍵入以下 SQL 語(yǔ)句:

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

5.“設(shè)計(jì)”選項(xiàng)卡上的“結(jié)果”組中,單擊“運(yùn)行”

多字段限制

多字段 CONSTRAINT 子句只能在字段定義子句之外使用,其語(yǔ)法如下:

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

請(qǐng)考慮使用 Cars 表的另一個(gè)示例。假設(shè)您要確保 Cars 表中不會(huì)出現(xiàn)其名稱、年份、狀況和價(jià)格的值都相同的兩條記錄。您可以使用下面的過(guò)程創(chuàng)建應(yīng)用于這些字段的 UNIQUE 限制:

1.“創(chuàng)建”選項(xiàng)卡上的“宏與代碼”組中,單擊“查詢?cè)O(shè)計(jì)”。
2.關(guān)閉“顯示表”對(duì)話框。
3.“設(shè)計(jì)”選項(xiàng)卡上的“查詢類型”組中,單擊“數(shù)據(jù)定義”

將隱藏設(shè)計(jì)網(wǎng)格并顯示 SQL 視圖對(duì)象選項(xiàng)卡。

4.鍵入以下 SQL 語(yǔ)句:

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

5.“設(shè)計(jì)”選項(xiàng)卡上的“結(jié)果”組中,單擊“運(yùn)行”

TopPageIcon_CLV 返回頁(yè)首

 

 

請(qǐng)參閱

?Access SQL 簡(jiǎn)介
?Access 編程簡(jiǎn)介
?數(shù)據(jù)庫(kù)設(shè)計(jì)基礎(chǔ)