MySQL - ALTER TABLE 語句



MySQL ALTER TABLE 語句

MySQL 的 ALTER TABLE 語句有助於對錶進行更改。使用此語句,我們可以在現有表中新增、刪除或修改列,我們還可以重新命名它。

語法

以下是 ALTER Table 語句的語法:

ALTER TABLE table_name [alter_option ...];

其中,table_name 是您需要更改的現有表的名稱,alter_option 表示您需要對錶執行的更改,例如 ADD COLUMNS、DROP COLUMN 等。

新增新列

例如,如果您需要向表新增新列,則應使用 ADD COLUMN 選項,如下所示:

ALTER TABLE table_name ADD COLUMN (column_name column_definition...)

示例

假設我們已建立了一個表,如下所示:

CREATE TABLE Employee(
   Name VARCHAR(255),
   Salary INT NOT NULL,
   Location VARCHAR(255)
);

以下查詢向 Employee 表新增一個名為 phone 的新列:

ALTER TABLE Employee ADD COLUMN (Phone int (10));

要驗證上述查詢,如果您使用 DESC 命令描述該表,您可以在欄位列表中觀察到建立的列,如下所示:

DESC employee;

以下是上述 mysql 查詢的輸出:

欄位 型別 Null 預設值 額外
姓名 varchar(255) YES NULL
薪資 int NULL
位置 varchar(255) YES NULL
電話 int YES NULL

在現有列之後新增列

如果您想在現有列之前或之後新增列,則需要使用 AFTER 後跟現有列的名稱(在列定義之後)。

ALTER TABLE table_name ADD COLUMN (column_name column_definition...)

示例

以下查詢在 Location 之後新增一個名為 address 的列。

ALTER TABLE Employee ADD COLUMN Address VARCHAR(50) AFTER Location;

要驗證上述查詢,如果您使用 DESC 命令描述該表,您可以在欄位列表中觀察到建立的列,如下所示:

DESC employee;

輸出

上述查詢產生以下輸出:

欄位 型別 Null 預設值 額外
姓名 varchar(255) YES NULL
薪資 int NULL
位置 varchar(255) YES NULL
地址 varchar(50) YES NULL
電話 int YES NULL

在開頭新增列

您可以使用 FIRST 語句以及 alter 在開頭新增新列,以下是執行此操作的語法:

ALTER TABLE table_name ADD COLUMN (column_name column_definition...)

示例

以下查詢在開頭新增一個名為 ID 的列:

ALTER TABLE Employee ADD COLUMN ID INT FIRST;

要驗證上述查詢,如果您使用 DESC 命令描述該表,您可以在欄位列表中觀察到建立的列,如下所示:

desc employee;

輸出

以下是上述查詢的輸出:

欄位 型別 Null 預設值 額外
ID int YES NULL
姓名 varchar(255) YES NULL
薪資 int NULL
位置 varchar(255) YES NULL
地址 int YES NULL
電話 int YES NULL

刪除列

您可以使用 DROP 語句以及 ALTER 刪除現有列,以下是執行此操作的語法:

ALTER TABLE table_name DROP COLUMN column_name;

示例

首先,讓我們使用 DESC 語句驗證表的定義:

desc employee;

輸出

上述查詢產生以下輸出:

欄位 型別 Null 預設值 額外
ID int YES NULL
姓名 varchar(255) YES NULL
薪資 int NULL
位置 varchar(255) YES NULL
地址 varchar(50) YES NULL
電話 int YES NULL

以下查詢刪除名為 ID 的列:

ALTER TABLE Employee DROP COLUMN ID;

要驗證上述查詢,如果您使用 DESC 命令描述該表,您會發現已刪除列的名稱在欄位列表中不存在:

desc employee;

以下是上述查詢的輸出:

欄位 型別 Null 預設值 額外
姓名 varchar(255) YES NULL
薪資 int NULL
位置 varchar(255) YES NULL
地址 varchar(50) YES NULL
電話 int YES NULL

新增索引

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

ALTER TABLE table_name ADD INDEX index_name [index_type] (key_part,...)

示例

以下查詢在 Name 和 Salary 列上新增索引:

ALTER TABLE Employee ADD INDEX sample_index (Name, Salary);

您可以使用 SHOW INDEX 語句驗證表的索引,如下所示:

SHOW INDEX FROM Employee;

輸出

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

*************** 1. row ***************
        Table: employee
   Non_unique: 1
     Key_name: sample_index
 Seq_in_index: 1
  Column_name: Name
    Collation: A
  Cardinality: 0
     Sub_part: NULL
       Packed: NULL
         Null: YES
   Index_type: BTREE
      Comment:
Index_comment:
      Visible: YES
   Expression: NULL
*************** 2. row ***************
        Table: employee
   Non_unique: 1
     Key_name: sample_index
 Seq_in_index: 2
  Column_name: Salary
    Collation: A
  Cardinality: 0
     Sub_part: NULL
       Packed: NULL
         Null:
   Index_type: BTREE
      Comment:
Index_comment:
      Visible: YES
   Expression: NULL

新增主鍵

以下是建立主鍵的語法:

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

示例

讓我們在 Employee 表中建立一個名為 ID 的列:

ALTER TABLE Employee ADD COLUMN ID INT FIRST;

以下查詢在 ID 列上建立主鍵:

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

要驗證上述查詢,如果您使用 DESC 命令描述該表,您可以在 Key 列下的 ID 欄位下觀察到 PRI:

desc employee;

輸出

以下是上述程式的輸出:

欄位 型別 Null 預設值 額外
ID int PRI NULL
姓名 varchar(255) YES MUL NULL
薪資 int NULL
位置 varchar(255) YES NULL
電話 int YES NULL

新增外部索引鍵

以下是建立外部索引鍵的語法:

ALTER TABLE table_name ADD CONSTRAINT key FORIEGN KEY (column_name);

示例

假設我們建立了另一個名為 test 的表,如下所示:

CREATE table Test (ID int PRIMARY KEY);

讓我們在 Employee 表中建立一個名為 ID 的列:

ALTER TABLE Employee ADD COLUMN ID INT FIRST;

以下查詢在 ID 列上建立主鍵:

ALTER TABLE Employee ADD CONSTRAINT fk FOREIGN KEY(ID) REFERENCES test(ID);

新增約束

以下是向列新增約束的語法:

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

示例

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

ALTER TABLE Employee ADD CONSTRAINT con UNIQUE(Phone);

刪除索引

以下是刪除表索引的語法:

ALTER TABLE table_name DROP INDEX index_name

示例

以下查詢刪除上面在 Employee 表上建立的索引:

ALTER TABLE Employee DROP INDEX sample_index;

刪除主鍵

以下是刪除主鍵的語法:

ALTER TABLE table_name DROP PRIMARY key_name;

示例

假設我們建立了一個表並添加了一個 PRIMARY KEY,如下所示:

create table sample (ID INT);
alter table sample add CONSTRAINT PRIMARY KEY (ID);

要驗證上述查詢,如果您使用 DESC 命令描述該表,您可以在 Key 列下的 ID 欄位下觀察到 PRI:

desc sample;

輸出

以下是上述查詢的輸出:

欄位 型別 Null 預設值 額外
ID int PRI NULL

以下查詢刪除上面建立的主鍵:

alter table sample drop PRIMARY KEY;

如果您使用 desc 語句描述示例表,您會發現主鍵已被刪除:

desc sample;

輸出

上述查詢產生以下輸出:

欄位 型別 Null 預設值 額外
ID int NULL

刪除外部索引鍵

以下是刪除外部索引鍵的語法:

ALTER TABLE table_name DROP PRIMARY key_name;

示例

以下查詢刪除 employee 表的外部索引鍵 fk:

ALTER TABLE Employee DROP FOREIGN KEY fk;
廣告