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 NULL,UNIQUE和數據類型。

以下語句顯示帶有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語句在表中添加,修改和刪除一個或多個列。