SQL ALTER TABLE

摘要:本教學示範如何使用 SQL ALTER TABLE 來變更資料庫中現有表格的結構。

一旦您建立新的表格,您可能因為業務需求變更而想要變更其結構。若要修改表格的結構,您可以使用 ALTER TABLE 陳述式。ALTER TABLE 陳述式允許您對現有表格執行以下操作:

  • 使用 ADD 子句新增欄位。
  • 使用 MODIFY 子句修改欄位的屬性,例如約束、預設值等。
  • 使用 DROP 子句移除欄位。

我們將在以下章節詳細檢視每個操作。

SQL ALTER TABLE ADD 欄位

以下陳述式說明 ALTER TABLEADD 子句的用法,讓您可以新增一個或多個欄位到表格。

ALTER TABLE table_name
ADD new_colum data_type column_constraint [AFTER existing_column];Code language: SQL (Structured Query Language) (sql)

若要新增一個或多個欄位到表格,您需要執行以下步驟:

  • 首先,在 ALTER TABLE 子句後指定您要新增欄位的表格,以 table_name 表示。
  • 其次,將新的欄位定義放在 ADD 子句之後。如果您想要指定新欄位在表格中的順序,您可以使用可選子句 AFTER existing_column

請注意,如果您省略 AFTER 子句,所有新欄位將會加在表格最後一個欄位之後。

讓我們看看一些將新欄位新增到我們在建立表格教學中建立的 courses 表格的範例。

SQL ALTER TABLE - courses table

以下陳述式將名為 credit_hours 的新欄位新增到 courses 表格。

ALTER TABLE courses ADD credit_hours INT NOT NULL;Code language: SQL (Structured Query Language) (sql)

您可以使用單一 ALTER TABLE 陳述式將多個欄位新增到表格。例如,以下陳述式將 feemax_limit 欄位新增到 courses 表格,並將這些欄位放在 course_name 欄位之後。

ALTER TABLE courses 
ADD fee NUMERIC (10, 2) AFTER course_name,
ADD max_limit INT AFTER course_name;Code language: SQL (Structured Query Language) (sql)

SQL ALTER TABLE MODIFY 欄位

MODIFY 子句允許您變更現有欄位的一些屬性,例如 NOT NULLUNIQUE資料類型

以下陳述式顯示 ALTER TABLE 陳述式與 DROP 子句的語法。

ALTER TABLE table_name
MODIFY column_definition;Code language: SQL (Structured Query Language) (sql)

請注意,您應該修改沒有資料的表格欄位的屬性。因為變更已經有資料的表格欄位的屬性可能會導致永久的資料遺失。

例如,如果欄位的資料類型是 VARCHAR,而您將其變更為 INT,則資料庫系統必須將資料從 VARCHAR 轉換為 INT。如果轉換失敗,資料庫系統可能會使用欄位的預設值,這可能不是您預期的。

以下 ALTER TABLE MODIFY 陳述式將 fee 欄位的屬性變更為 NOT NULL

ALTER TABLE courses 
MODIFY fee NUMERIC (10, 2) NOT NULL;Code language: SQL (Structured Query Language) (sql)

SQL ALTER TABLE DROP 欄位

當表格的欄位已過時且不被任何其他資料庫物件(例如觸發程序檢視表、儲存和預存程序)使用時,您需要將其從表格中移除。

若要移除一個或多個欄位,您可以使用以下語法:

ALTER TABLE table_name
DROP column_name,
DROP colum_name,
...Code language: SQL (Structured Query Language) (sql)

例如,若要移除 courses 表格的 fee 欄位,您可以使用以下陳述式。

ALTER TABLE courses DROP COLUMN fee;Code language: SQL (Structured Query Language) (sql)

若要同時移除多個欄位,您可以使用多個以逗號 (,) 分隔的 DROP COLUMN 子句。

例如,以下陳述式移除 courses 表格的 max_limitcredit_hours 欄位。

ALTER TABLE courses 
DROP COLUMN max_limit,
DROP COLUMN credit_hours;Code language: SQL (Structured Query Language) (sql)

在本教學中,您逐步學習如何使用 SQL ALTER TABLE 陳述式來新增、修改和刪除表格中的一個或多個欄位。

本教學對您有幫助嗎?