Applies ToMicrosoft 365 Access Access 2024 Access 2021 Access 2019 Access 2016

您可以在 [SQL 檢視] 中撰寫數據定義查詢,以在 Access 中建立及修改數據表、限制式、索引和關聯。 本文將說明數據定義查詢,以及如何使用這些查詢來建立數據表、限制式、索引和關聯。 本文也可以協助您決定何時使用數據定義查詢。

本文內容

概觀

不同於其他 Access 查詢,資料定義查詢不會擷取數據。 相反地,資料定義查詢會使用數據定義語言來建立、修改或刪除資料庫物件。

附註: 數據定義語言 (DDL) 是 SQL (結構化查詢語言) 的一部分。

數據定義查詢可能非常方便。 您可以只執行一些查詢,定期刪除及重新建立資料庫架構的部分。 如果您熟悉 SQL 語句,並打算刪除並重新建立特定的數據表、限制式、索引或關聯,請考慮使用數據定義查詢。

警告: 使用數據定義查詢修改資料庫物件可能會有風險,因為動作不會伴隨確認對話方塊。 如果您出錯,可能會遺失數據,或不小心變更數據表的設計。 當您使用資料定義查詢修改資料庫中的物件時,請務必小心。 如果您不負責維護所使用的資料庫,您應先洽詢資料庫管理員,再執行數據定義查詢。

重要: 在執行資料定義查詢之前,請先備份包含的任何數據表複本。

DDL 關鍵詞

關鍵字

用途

CREATE

建立不存在的索引或數據表。

ALTER

修改現有的數據表或數據行。

DROP

刪除現有的數據表、數據行或限制式。

ADD

在數據表中新增欄或限制式。

COLUMN

搭配 ADD、ALTER 或 DROP 使用

CONSTRAINT

搭配 ADD、ALTER 或 DROP 使用

INDEX

搭配 CREATE 使用

TABLE

搭配 ALTER、CREATE 或 DROP 使用

頁面頂端

建立或修改數據表

若要建立數據表,請使用 [建立表格] 命令。 [建立表格] 命令具有下列語法:

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. 在 [ 設計] 索引 標籤的 [ 查詢類型] 群組中,按兩下 [ 資料定義]

    設計網格線會隱藏起來,並顯示 [SQL 檢視物件] 索引標籤。

  3. 輸入下列 SQL 語句:

    建立 TABLE Cars (名稱文字 (30) 、年文字 (4) 、價格貨幣)

  4. 在 [設計] 索引標籤上的 [結果] 群組中,按一下 [執行]。

修改表格

若要修改資料表,請使用 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. 在 [ 設計] 索引 標籤的 [ 查詢類型] 群組中,按兩下 [ 資料定義]

    設計網格線會隱藏起來,並顯示 [SQL 檢視物件] 索引標籤。

  3. 輸入下列 SQL 語句:

    ALTER TABLE Cars ADD COLUMN 條件文字 (10)

  4. 在 [設計] 索引標籤上的 [結果] 群組中,按一下 [執行]。

頁面頂端

建立索引

若要在現有數據表上建立索引,請使用 [建立索引] 命令。 CREATE INDEX 命令具有下列語法:

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

唯一的必要元素是 CREATE INDEX 命令、索引名稱、ON 自變數、包含您要編制索引之欄位的數據表名稱,以及要包含在索引中的欄位清單。

  • DESC 自變數會讓索引以遞減順序建立,如果您經常執行查詢以尋找索引欄位的頂端值,或是以遞減順序排序索引字段,則此自變數會很有用。 根據預設,系統會以遞增順序建立索引。

  • WITH PRIMARY 自變數會建立索引字段或字段做為數據表的 主索引鍵 。

  • WITH DISALLOW NULL 自變數會讓索引要求輸入索引欄位的值,也就是不允許 Null 值。

假設您有一個名為 [汽車] 的數據表,其中包含儲存您考慮購買的二手車名稱、年份、價格和條件的欄位。 此外,假設數據表已經變得很大,而且您經常在查詢中包含年份欄位。 您可以在 [年份] 字段上建立索引,以使用下列程序協助查詢更快速地傳回結果:

  1. 在 [ 建立] 索引 標籤 的 [宏 & 程式代碼 ] 群組中,按兩下 [查詢設計]

  2. 在 [ 設計] 索引 標籤的 [ 查詢類型] 群組中,按兩下 [ 資料定義]

    設計網格線會隱藏起來,並顯示 [SQL 檢視物件] 索引標籤。

  3. 輸入下列 SQL 語句:

    建立 INDEX YearIndex on Cars (Year)

  4. 在 [設計] 索引標籤上的 [結果] 群組中,按一下 [執行]。

頁面頂端

建立限制式或關聯

限制式會建立在插入值時,字段或字段組合必須符合的邏輯條件。 例如,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}]}

假設您有一個名為 [汽車] 的數據表,其中包含儲存您考慮購買的二手車名稱、年份、價格和條件的欄位。 也假設您經常忘記輸入車用條件的值,而且總是想要記錄這項資訊。 您可以使用下列程式,在 [條件] 字段上建立限制式,防止您將字段留空:

  1. 在 [ 建立] 索引 標籤 的 [宏 & 程式代碼 ] 群組中,按兩下 [查詢設計]

  2. 在 [ 設計] 索引 標籤的 [ 查詢類型] 群組中,按兩下 [ 資料定義]

    設計網格線會隱藏起來,並顯示 [SQL 檢視物件] 索引標籤。

  3. 輸入下列 SQL 語句:

    ALTER TABLE Cars ALTER COLUMN 條件文字限制條件要求 NOT NULL

  4. 在 [設計] 索引標籤上的 [結果] 群組中,按一下 [執行]。

現在假設過了一段時間后,您發現 [條件] 字段中有許多類似的值應該相同。 例如,有些車輛的「條件」值 不佳 ,有些則有 錯誤的值。

附註: 如果您想要遵循其餘的程式,請將一些假數據新增至您在上述步驟中建立的 [汽車] 數據表。

清除值使其更一致之後,您可以建立名為 CarCondition 的數據表,其中包含一個名為 [條件] 的欄位,其中包含您要用於汽車條件的所有值:

  1. 在 [ 建立] 索引 標籤 的 [宏 & 程式代碼 ] 群組中,按兩下 [查詢設計]

  2. 在 [ 設計] 索引 標籤的 [ 查詢類型] 群組中,按兩下 [ 資料定義]

    設計網格線會隱藏起來,並顯示 [SQL 檢視物件] 索引標籤。

  3. 輸入下列 SQL 語句:

    CREATE TABLE CarCondition (條件 TEXT (10) )

  4. 在 [設計] 索引標籤上的 [結果] 群組中,按一下 [執行]。

  5. 使用 ALTER TABLE 語句建立資料表的主鍵:

    ALTER TABLE CarCondition ALTER COLUMN 條件文字限制式 CarConditionPK PRIMARY 鍵

  6. 若要將 [汽車] 數據表 [條件] 字段中的值插入新的 CarCondition 數據表,請在 [SQL 檢視] 物件索引卷標中輸入下列 SQL:

    INSERT INTO CarCondition SELECT DISTINCT Condition FROM Cars;

    附註: 此步驟中的 SQL 語句是 新增查詢。 與數據定義查詢不同的是,追加查詢結尾是分號。

  7. 在 [設計] 索引標籤上的 [結果] 群組中,按一下 [執行]。

使用限制式建立關聯

若要要求插入 [汽車] 數據表 [條件] 欄位的任何新值符合 CarCondition 數據表中 [條件] 字段的值,您可以使用下列程式,在名為 [條件] 的字段上建立 CarCondition 與 [汽車] 之間的關聯:

  1. 在 [ 建立] 索引 標籤 的 [宏 & 程式代碼 ] 群組中,按兩下 [查詢設計]

  2. 在 [ 設計] 索引 標籤的 [ 查詢類型] 群組中,按兩下 [ 資料定義]

    設計網格線會隱藏起來,並顯示 [SQL 檢視物件] 索引標籤。

  3. 輸入下列 SQL 語句:

    ALTER TABLE Cars ALTER COLUMN 條件文字限制式 FKeyCondition REFERENCES CarCondition (條件)

  4. 在 [設計] 索引標籤上的 [結果] 群組中,按一下 [執行]。

多欄位限制式

多欄位 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. 在 [ 設計] 索引 標籤的 [ 查詢類型] 群組中,按兩下 [ 資料定義]

    設計網格線會隱藏起來,並顯示 [SQL 檢視物件] 索引標籤。

  3. 輸入下列 SQL 語句:

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

  4. 在 [設計] 索引標籤上的 [結果] 群組中,按一下 [執行]。

頁面頂端

需要更多協助嗎?

想要其他選項嗎?

探索訂閱權益、瀏覽訓練課程、瞭解如何保護您的裝置等等。

社群可協助您詢問並回答問題、提供意見反應,以及聆聽來自具有豐富知識的專家意見。