SQL Alter Table


本教學介紹如何使用SQL ALTER TABLE更改資料庫中現有表的結構。

建立新表後,您可能希望更改其結構,因為業務需求會發生變化。 要修改表的結構,請使用ALTER TABLE語句。 ALTER TABLE語句用於對現有表執行以下操作:

  • 使用ADD子句新增新列。
  • 使用MODIFY子句修改列的屬性,例如:約束,預設值等。
  • 使用DROP子句刪除列。

我們將在以下部分詳細學習每個操作。

1. SQL ALTER TABLE ADD列

以下語句說明了帶有ADD子句的ALTER TABLE,該子句用於向表中新增一個或多個列。

ALTER TABLE table_name
ADD new_colum data_type column_constraint [AFTER existing_column];

要向表中新增一個或多個列,需要執行以下步驟:

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

注意,如果省略AFTER子句,則將在表的最後一列之後新增新列。

下面來看看如何將一些新列新增到在create table教學中建立的courses表的範例。

以下語句將一個名稱為credit_hours的新列新增到courses表中。

ALTER TABLE courses ADD credit_hours INT NOT NULL;

使用單個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;

2. SQL ALTER TABLE MODIFY列

MODIFY子句用於更改現有列的某些屬性,例如,NOT NULLUNIQUE和資料型別。

以下語句顯示帶有MODIFY子句的ALTER TABLE語句的語法。

ALTER TABLE table_name
MODIFY column_definition;

請注意,應該修改沒有資料的表的列的屬性。 因為更改已包含資料的表中列的屬性可能會導致永久性資料丟失。

例如,如果列的資料型別為VARCHAR,並且將其更改為INT,則資料庫系統必須將資料從VARCHAR轉換為INT。 如果轉換失敗,資料庫系統可能會使用列的預設值,這可能與預期不符。

以下ALTER TABLE MODIFY語句將fee列的屬性更改為NOT NULL

ALTER TABLE courses 
MODIFY fee NUMERIC (10, 2) NOT NULL;

3. SQL ALTER TABLE DROP列

當表的列已過時且未被任何其他資料庫物件(如觸發器,檢視,儲存過程和儲存過程)使用時,需要將其從表中刪除。

要刪除一個或多個列,請使用以下語法:

ALTER TABLE table_name
DROP column_name,
DROP colum_name,
...

例如,要刪除courses表中的fee列,請使用以下語句。

ALTER TABLE courses DROP COLUMN fee;

若要同時刪除多個列,請使用以逗號(,)分隔的多個DROP COLUMN子句。

例如,以下語句刪除courses表中的max_limitcredit_hours

ALTER TABLE courses 
DROP COLUMN max_limit,
DROP COLUMN credit_hours;

在本教學中,我們逐步學習了如何使用SQL ALTER TABLE語句在表中新增,修改和刪除一個或多個列。