共用方式為


使用 Access SQL 修改資料表的設計

建立並填入資料表之後,您可能需要修改資料表的設計。 若要這樣做,請使用 ALTER TABLE 語句。 請注意,改變現有資料表的結構可能會導致您遺失部分資料。 例如,根據您使用的資料類型而定,變更欄位的資料類型可能會導致資料遺失或舍入錯誤。 它也可以中斷應用程式中可能參考已變更欄位的其他部分。 修改現有資料表的結構之前,請務必特別小心。

使用 ALTER TABLE 語句,您可以新增、移除或變更資料行 (或欄位) ,而且您可以新增或移除條件約束。 您也可以宣告欄位的預設值;不過,您一次只能改變一個欄位。 假設您有開立發票的資料庫,而且您想要將欄位新增至 Customers 資料表。 若要使用 ALTER TABLE 語句加入欄位,請視需要使用 ADD COLUMN 子句搭配功能變數名稱、其資料類型和資料類型的大小。

ALTER TABLE tblCustomers 
   ADD COLUMN Address TEXT(30) 

若要變更資料類型或欄位大小,請將 ALTER COLUMN 子句用於欄位名稱、所需的資料類型,以及所需的資料類型大小 (如果需要的話)。

ALTER TABLE tblCustomers 
   ALTER COLUMN Address TEXT(40) 

如果您想要變更欄位的名稱,您必須移除欄位,然後重新建立它。 若要移除欄位,請將 DROP COLUMN 子句用於欄位名稱。

ALTER TABLE tblCustomers 
   DROP COLUMN Address 

請注意,使用這個方法會刪除欄位的現有資料。 若要保留現有的資料,您應該使用 Access 使用者介面的資料表設計模式變更欄位的名稱,或撰寫程式碼將目前的資料保留在臨時表中,並將它附加回重新命名的資料表。 預設值是指每當加入新記錄到資料表,而且沒有為特定資料行指定任何值時,系統所輸入該欄位的值。 若要設定某欄位的預設值,請在以 ADD COLUMNALTER COLUMN 子句宣告欄位類型後,使用 DEFAULT 關鍵字。

ALTER TABLE tblCustomers 
   ALTER COLUMN Address TEXT(40) DEFAULT Unknown 

請注意,預設值不會以單引號括住。 如果是以單引號括住,則引號也會插入到記錄中。 DEFAULT關鍵字也可以在CREATE TABLE語句中使用。

CREATE TABLE tblCustomers ( 
   CustomerID INTEGER CONSTRAINT PK_tblCustomers 
      PRIMARY KEY, 
   [Last Name] TEXT(50) NOT NULL, 
   [First Name] TEXT(50) NOT NULL, 
   Phone TEXT(10), 
   Email TEXT(50), 
   Address TEXT(40) DEFAULT Unknown) 

注意事項

DEFAULT 陳述式只可以經由 Access OLE DB 提供者及 ADO 執行。 如果是經由 Access SQL View 使用者介面使用,則會傳回錯誤訊息。

條件約束

條件約束可以用來建立主索引鍵和關聯完整性,並限制可以插入欄位的值。 一般而言,善用條件約束可以保持資料庫中資料的完整性與一致性。

常數共有兩種類型:單欄或欄位等級的常數,或是多欄或表格等級的常數。 這兩種限制式都可以在 CREATE TABLEALTER TABLE 陳述式中使用。

單欄限制式 (又稱為欄等級限制式) 是在欄位和資料類型已宣告後,與欄位本身一起宣告。 如果是這個範例,請使用 [客戶] 資料表並在 CustomerID 欄位上建立單欄主索引鍵。 若要加入限制式,請將 CONSTRAINT 關鍵字用於欄位名稱。

ALTER TABLE tblCustomers 
   ALTER COLUMN CustomerID INTEGER 
   CONSTRAINT PK_tblCustomers PRIMARY KEY 

請注意,已指定條件約束的名稱。 您可以使用捷徑來宣告完全省略 CONSTRAINT 子句的主索引鍵。

ALTER TABLE tblCustomers 
   ALTER COLUMN CustomerID INTEGER PRIMARY KEY 

不過,使用快捷方式方法會導致 Access 隨機產生條件約束的名稱,這會讓程式碼難以參考。 最好一律為條件約束命名。

若要捨棄條件約束,請搭配 ALTER TABLE 陳述式使用 DROP CONSTRAINT 子句,然後提供此條件約束的名稱。

ALTER TABLE tblCustomers 
   DROP CONSTRAINT PK_tblCustomers 

條件約束也可以限制欄位內可以接受的值。 您可以將值限制為 NOT NULLUNIQUE,或是定義檢查條件約束,這是一種可套用到欄位上的商業規則類型。 想像您要將名字及姓氏欄位的值限制 (或約束) 為唯一值,這表示資料表的任何兩筆記錄中絕對不會有相同的名字姓氏組合出現。 因為這是多欄限制式,所以會在資料表層級上宣告,而不是在欄位層級。 請使用 ADD CONSTRAINT 子句,並定義多欄清單。

ALTER TABLE tblCustomers 
   ADD CONSTRAINT CustomerID UNIQUE 
   ([Last Name], [First Name]) 

檢查條件約束是強大的 SQL 功能,可讓您建立運算式,參照至單一欄位或跨越多個資料表的多個欄位,以便在資料表新增資料驗證。 假設您要確定在發票記錄輸入的數量永遠都會大於 $0.00。 若要做到這點,請在 ALTER TABLE 陳述式的 ADD CONSTRAINT 子句中宣告 CHECK 關鍵字和您的驗證運算式,即可使用檢查條件約束。

ALTER TABLE tblInvoices 
   ADD CONSTRAINT CheckAmount 
   CHECK (Amount > 0) 

用來定義檢查條件約束的運算式也可以參照同一資料表中的一個以上的欄位,或者參照其他資料表中的多個欄位,而且可以使用在 Microsoft Access SQL 中有效的任何作業,例如 SELECT 陳述式、數學運算子和彙總函數。 定義檢查條件約束的運算式不能超過 64 個字元的長度。

假設您想要在將每位客戶新增至 Customers 資料表之前,先檢查每位客戶的信用額度。 您可以使用含有 ADD COLUMNCONSTRAINT 子句的 ALTER TABLE 陳述式,建立一個可查閱 CreditLimit 資料表值的條件約束,以驗證客戶的信用額度。 請使用下列 SQL 陳述式建立 tblCreditLimit 資料表、在 tblCustomers 資料表中新增 CustomerLimit 欄位、在 tblCustomers 資料表中新增檢查條件約束,以及測試此檢查條件約束。

CREATE TABLE tblCreditLimit ( 
   Limit DOUBLE) 
 
INSERT INTO tblCreditLimit 
   VALUES (100) 
 
ALTER TABLE tblCustomers 
   ADD COLUMN CustomerLimit DOUBLE 
 
ALTER TABLE tblCustomers 
   ADD CONSTRAINT LimitRule 
   CHECK (CustomerLimit <= (SELECT Limit 
      FROM tblCreditLimit)) 
 
UPDATE TABLE tblCustomers 
   SET CustomerLimit = 200 
   WHERE CustomerID = 1 

請注意,當您執行 UPDATE TABLE 語句時,您會收到訊息,指出更新未成功,因為它違反檢查條件約束。 如果您將 CustomerLimit 欄位更新成等於或小於 100 的值,更新會成功。

重疊顯示更新及刪除

限制式也可用來建立資料庫資料表之間的參照完整性。 具備參照完整性是指資料為一致且完整的資料。 例如,如果您刪除了某客戶的記錄,但是該客戶的出貨記錄卻仍保留在資料庫中,如此資料便沒有一致,這是因為出貨資料表中有一筆記錄失去了其參照的依據。 在資料表間建立關聯性時,參照完整性便會隨之建立。

除了建立參照完整性以外,您也可以使用重疊顯示更新及刪除,確保參照資料表的記錄能維持同步化。 例如,在宣告重疊顯示更新和刪除時,如果刪除了某位客戶的記錄,則該客戶的出貨記錄也會自動被刪除。

若要啟用重疊顯示更新和刪除功能,請在 ALTER TABLE 陳述式的 CONSTRAINT 子句中使用 ON UPDATE CASCADE 及 (或) ON DELETE CASCADE 關鍵字。 請注意,它們必須套用至外鍵。

ALTER TABLE tblShipping 
   ADD CONSTRAINT FK_tblShipping 
   FOREIGN KEY (CustomerID) REFERENCES 
      tblCustomers (CustomerID) 
   ON UPDATE CASCADE 
   ON DELETE CASCADE 

支援和意見反應

有關於 Office VBA 或這份文件的問題或意見反應嗎? 如需取得支援服務並提供意見反應的相關指導,請參閱 Office VBA 支援與意見反應