MySQL新增列

2019-10-16 22:57:19

在本教學中,我們將向您展示如何使用MySQL ADD COLUMN語句將列新增到表中。

MySQL ADD COLUMN語句簡介

要向現有表新增新列,請按如下所示使用ALTER TABLE ADD COLUMN語句:

  • 首先,在ALTER TABLE子句之後指定表名。
  • 其次,將新列及其定義放在ADD COLUMN子句之後。 請注意,COLUMN關鍵字是可選的,因此可以省略它。
  • 第三,MySQL允許通過指定FIRST關鍵字將新列新增到表的第一列。 它還允許您使用AFTER existing_column子句在現有列之後新增新列。如果沒有明確指定新列的位置,MySQL會將其新增為最後一列。

要同時向表中新增兩個或多個列,請使用以下語法:

ALTER TABLE table
ADD [COLUMN] column_name_1 column_1_definition [FIRST|AFTER existing_column],
ADD [COLUMN] column_name_2 column_2_definition [FIRST|AFTER existing_column],
...;

我們來看一些向現有表新增新列的範例。

MySQL ADD COLUMN範例

首先,作為演示目的我們使用以下語句,建立一個名為vendor的表:

USE testdb;

CREATE TABLE IF NOT EXISTS vendors (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255)
);

第二,在vendors表中新增一個名為phone的新列。 因為在name列之後明確指定了phone列的位置,MySQL將會遵守這一點。

ALTER TABLE vendors
ADD COLUMN phone VARCHAR(15) AFTER name;

第三,在vendors表中新增一個名為vendor_group的新列。 此時,不指定新列的位置,因此MySQL將vendor_group列新增為vendors表的最後一列。

ALTER TABLE vendors
ADD COLUMN vendor_group INT NOT NULL;

讓我們插入一些行資料到vendors表。

INSERT INTO vendors(name,phone,vendor_group)
VALUES('IBM','(408)-298-2987',1);

INSERT INTO vendors(name,phone,vendor_group)
VALUES('Microsoft','(408)-298-2988',1);

可以查詢vendors表的資料來檢視更改。

SELECT 
    id, name, phone,vendor_group
FROM
    vendors;

+----+-----------+----------------+--------------+
| id | name      | phone          | vendor_group |
+----+-----------+----------------+--------------+
|  1 | IBM       | (408)-298-2987 |            1 |
|  2 | Microsoft | (408)-298-2988 |            1 |
+----+-----------+----------------+--------------+
2 rows in set

第四,同時向vendors表格新增兩列:emailhourly_rate

ALTER TABLE vendors
ADD COLUMN email VARCHAR(100) NOT NULL,
ADD COLUMN hourly_rate decimal(10,2) NOT NULL;

請注意,emailhourly_rate列都分配給NOT NULL值。但是,vendors表已經有資料。 在這種情況下,MySQL將為這些新列使用預設值。

現在,我們來檢視vendors表中的資料,如下 -

SELECT 
    id, name, phone, vendor_group, email, hourly_rate
FROM
    vendors;

+----+-----------+----------------+--------------+-------+-------------+
| id | name      | phone          | vendor_group | email | hourly_rate |
+----+-----------+----------------+--------------+-------+-------------+
|  1 | IBM       | (408)-298-2987 |            1 |       | 0           |
|  2 | Microsoft | (408)-298-2988 |            1 |       | 0           |
+----+-----------+----------------+--------------+-------+-------------+
2 rows in set

email列填充有空白字元值,而不是NULL值。hourly_rate列填充0.00值。

如果不小心新增了表中已經存在的列,MySQL將發出錯誤。 例如,如果執行以下語句:

ALTER TABLE vendors
ADD COLUMN vendor_group INT NOT NULL;

MySQL發出錯誤訊息:

Error Code: 1060. Duplicate column name 'vendor_group'

對於具有幾列的表,很容易看出哪些列已經存在。 但是,有一個大表中有一百個列,這是比較困難的。

在某些情況下,您需要在新增表之前檢查一列是否已經存在。 但是,沒有像ADD COLUMN IF NOT EXISTS這樣的宣告。 但是可以從information_schema資料庫的columns表中獲取以下資訊:

SELECT 
    IF(count(*) = 1, 'Exist','Not Exist') AS result
FROM
    information_schema.columns
WHERE
    table_schema = 'testdb'
        AND table_name = 'vendors'
        AND column_name = 'phone';

+--------+
| result |
+--------+
| Exist  |
+--------+
1 row in set

WHERE子句中,我們傳遞了三個引數:表模式或資料庫,表名和列名。使用IF函式返回列是否存在。

在本教學中,已經學習了如何使用MySQL DROP COLUMN語句將一個或多個列新增到表中。