在本教學中,我們將向您展示如何使用MySQL ADD COLUMN
語句將列新增到表中。
要向現有表新增新列,請按如下所示使用ALTER TABLE ADD COLUMN
語句:
ALTER TABLE
子句之後指定表名。ADD COLUMN
子句之後。 請注意,COLUMN
關鍵字是可選的,因此可以省略它。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],
...;
我們來看一些向現有表新增新列的範例。
首先,作為演示目的我們使用以下語句,建立一個名為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
表格新增兩列:email
和hourly_rate
。
ALTER TABLE vendors
ADD COLUMN email VARCHAR(100) NOT NULL,
ADD COLUMN hourly_rate decimal(10,2) NOT NULL;
請注意,email
和hourly_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
語句將一個或多個列新增到表中。