Sign in with Microsoft
Sign in or create an account.
Hello,
Select a different account.
You have multiple accounts
Choose the account you want to sign in with.

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

本文內容

概觀

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

附註: 數據定義語言 (DDL) 是 結構化查詢語言 (SQL) (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. 在 [設計] 索引標籤上的 [結果] 群組中,按一下 [執行]。

頁面頂端

Need more help?

Want more options?

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

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

Was this information helpful?

How satisfied are you with the translation quality?
What affected your experience?
By pressing submit, your feedback will be used to improve Microsoft products and services. Your IT admin will be able to collect this data. Privacy Statement.

Thank you for your feedback!

×