SQL - ALTER TABLE



SQL − ALTER TABLE 語句

SQL 的ALTER TABLE 命令是資料定義語言 (DDL) 的一部分,用於修改表結構。ALTER TABLE 命令可以新增或刪除列、建立或刪除索引、更改現有列的型別,或重新命名列或表本身。

ALTER TABLE 命令還可以更改表的特性,例如表使用的儲存引擎。在我們的示例中,我們將使用下表:

ID 姓名 年齡 地址 薪水
1 Ramesh 32 Ahmedabad 2000.00
2 Khilan 25 Delhi 1500.00
3 Kaushik 23 Kota 2000.00
4 Chaitali 25 Mumbai 6500.00
5 Hardik 27 Bhopal 8500.00
6 Komal 22 Hyderabad 4500.00
7 Muffy 24 Indore 10000.00

語法

以下是 ALTER TABLE 命令的基本語法:

ALTER TABLE table_name [alter_option ...];

其中,alter_option 取決於要對錶執行的操作型別。本文將逐一討論這些重要操作。

ALTER TABLE − 新增列

如果需要向表中新增新列,應將ADD COLUMN 選項與 ALTER TABLE 語句一起使用,如下所示:

ALTER TABLE table_name ADD column_name datatype;

示例

以下是向現有表中新增新列的示例:

ALTER TABLE CUSTOMERS ADD SEX char(1);

輸出

執行上述查詢將產生以下輸出:

Query OK, 0 rows affected (0.09 sec)
Records: 0  Duplicates: 0  Warnings: 0

驗證

要驗證是否透過新增新列 SEX 來更改 CUSTOMERS 表,請使用 SELECT 語句檢索表的記錄:

SELECT * FROM CUSTOMERS;

現在,CUSTOMERS 表將顯示如下:

ID 姓名 年齡 地址 薪水 性別
1 Ramesh 32 Ahmedabad 2000.00 NULL
2 Khilan 25 Delhi 1500.00 NULL
3 Kaushik 23 Kota 2000.00 NULL
4 Chaitali 25 Mumbai 6500.00 NULL
5 Hardik 27 Bhopal 8500.00 NULL
6 Komal 22 Hyderabad 4500.00 NULL
7 Muffy 24 Indore 10000.00 NULL

ALTER TABLE − 刪除列

如果需要從表中刪除現有列,應將 DROP COLUMN 選項與 ALTER TABLE 語句一起使用,如下所示。

ALTER TABLE table_name DROP COLUMN column_name;

示例

以下是從現有表中刪除 sex 列的示例。

ALTER TABLE CUSTOMERS DROP COLUMN SEX;

輸出

執行上述查詢將產生以下輸出:

Query OK, 0 rows affected (0.07 sec)
Records: 0  Duplicates: 0  Warnings: 0

驗證

要驗證是否透過刪除現有列 SEX 來更改 CUSTOMERS 表,請使用 SELECT 語句檢索表的記錄:

SELECT * FROM CUSTOMERS;

現在,CUSTOMERS 表已更改,SELECT 語句的輸出如下。

ID 姓名 年齡 地址 薪水
1 Ramesh 32 Ahmedabad 2000.00
2 Khilan 25 Delhi 1500.00
3 Kaushik 23 Kota 2000.00
4 Chaitali 25 Mumbai 6500.00
5 Hardik 27 Bhopal 8500.00
6 Komal 22 Hyderabad 4500.00
7 Muffy 24 Indore 10000.00

ALTER TABLE − 新增索引

可以使用 ADD INDEX 語句以及 ALTER 語句向表的現有列新增索引:

ALTER TABLE table_name 
ADD INDEX index_name [index_type] 

示例

以下查詢在 CUSTOMERS 表的 NAME 列上新增索引:

ALTER TABLE CUSTOMERS ADD INDEX name_index (NAME);

輸出

輸出將顯示為:

Query OK, 0 rows affected (0.003 sec)
Records: 0  Duplicates: 0  Warnings: 0

ALTER TABLE − 刪除索引

可以使用 DROP INDEX 語句以及 ALTER 語句從表中刪除現有索引:

ALTER TABLE table_name DROP INDEX index_name;

示例

以下查詢在 CUSTOMERS 表的 NAME 列上新增索引:

ALTER TABLE CUSTOMERS DROP INDEX name_index;

輸出

輸出將顯示為:

Query OK, 0 rows affected (0.003 sec)
Records: 0  Duplicates: 0  Warnings: 0

ALTER TABLE − 新增主鍵

以下是向資料庫現有表中新增主鍵的語法:

ALTER TABLE table_name 
ADD CONSTRAINT constraint_name
PRIMARY KEY (column1, column2...);

示例

在向現有表新增主鍵之前,讓我們先建立一個名為 EMPLOYEES 的新表,如下所示

CREATE TABLE EMPLOYEES(
   ID          INT NOT NULL,
   NAME        VARCHAR (20) NOT NULL,
   AGE         INT NOT NULL,
   ADDRESS     CHAR (25),
   SALARY      DECIMAL (18, 2)
);

以下查詢在 EMPLOYEES 表的 ID 列上新增主鍵約束:

ALTER TABLE EMPLOYEES 
ADD CONSTRAINT MyPrimaryKey 
PRIMARY KEY(ID);

這將產生以下輸出:

Query OK, 0 rows affected, 1 warning (0.003 sec)
Records: 0  Duplicates: 0  Warnings: 1

驗證

要驗證上述查詢,如果使用 DESC EMPLOYEES 命令描述表:

DESC EMPLOYEES;

這將顯示所建立表的結構:列名、它們各自的資料型別、約束(如果有)等。

欄位 型別 空值 預設值 額外
ID int(11) PRI NULL
姓名 varchar(20) NULL
年齡 int(11) NULL
地址 char(25) NULL
薪水 decimal(18,2) NULL

ALTER TABLE − 刪除主鍵

以下是從資料庫現有表中刪除主鍵的語法:

ALTER TABLE table_name DROP PRIMARY KEY;

示例

以下查詢從 EMPLOYEES 表的 ID 列中刪除主鍵約束:

ALTER TABLE EMPLOYEES DROP PRIMARY KEY;

這將產生以下輸出:

Query OK, 0 rows affected, 1 warning (0.003 sec)
Records: 0  Duplicates: 0  Warnings: 1

ALTER TABLE − 新增約束

以下是向現有表列新增唯一約束的語法:

ALTER TABLE table_name 
ADD CONSTRAINT constraint_name 
UNIQUE(column1, column2...);

示例

以下查詢向 CUSTOMERS 表新增 UNIQUE 約束:

ALTER TABLE EMPLOYEES ADD CONSTRAINT CONST UNIQUE(NAME);

這將產生以下輸出:

Query OK, 0 rows affected (0.003 sec)
Records: 0  Duplicates: 0  Warnings: 0

ALTER TABLE − 刪除約束

以下是刪除現有表唯一約束的語法:

ALTER TABLE table_name DROP CONSTRAINT constraint_name;

示例

以下查詢向 CUSTOMERS 表新增 UNIQUE 約束:

ALTER TABLE EMPLOYEES DROP CONSTRAINT CONST;

這將產生以下輸出:

Query OK, 0 rows affected (0.003 sec)
Records: 0  Duplicates: 0  Warnings: 0

ALTER TABLE − 重新命名列

以下是重新命名現有表列名的語法:

ALTER TABLE table_name 
RENAME COLUMN old_column_name to new_column_name;

示例

以下查詢重新命名 CUSTOMERS 表中的 NAME 列:

ALTER TABLE CUSTOMERS RENAME COLUMN name to full_name;

這將產生以下輸出:

Query OK, 0 rows affected (0.002 sec)
Records: 0  Duplicates: 0  Warnings: 0

ALTER TABLE − 修改資料型別

以下是更改 MySQL、MS Server 和 Oracle 中任何列的資料型別的語法。

SQL Server/MS Access 語法

ALTER TABLE table_name ALTER COLUMN column_name datatype;

MySQL 語法

ALTER TABLE table_name MODIFY COLUMN column_name datatype;

Oracle 語法

ALTER TABLE table_name MODIFY COLUMN column_name datatype;

示例

以下查詢修改 MySQL CUSTOMERS 表中 SALARY 列的資料型別:

ALTER TABLE CUSTOMERS MODIFY COLUMN ID DECIMAL(18, 4);

這將產生以下輸出:

Query OK, 0 rows affected (0.003 sec)
Records: 0  Duplicates: 0  Warnings: 0
廣告