Skip to main content

如何使用MySQL Add COLUMN向表中添加列

MySQL ADD COLUMN语句简介

要向现有表中添加新列,请使用ALTER table add column语句,如下所示:

ALTER TABLE table
ADD [COLUMN] column_name column_definition [FIRST|AFTER existing_column];

让我们更详细地检查一下这个陈述。

要同时向表中添加两列或多列,请使用以下语法:

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添加列示例

首先,我们使用以下语句创建一个名为vendors的表,用于演示:

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

其次,我们将一个名为phone的新列添加到vendors表中。因为我们在name列之后显式地指定phone列的位置,所以MySQL将遵循这一点。

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

第三,我们将名为vendor_group的新列添加到vendors表中。此时,我们不指定新列的位置,因此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);

我们可以查询供应商表的数据以查看更改。

SELECT 
id, name, phone,vendor_group
FROM
vendors;

MySQL ADD COLUMN example

第四,在供应商表中同时添加两列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列都被指定为非空值,但是vendors表已经有数据了。在这种情况下,MySQL将为这些新列使用默认值。让我们检查一下供应商表中的数据。

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

MySQL ADD COLUMN with default values

电子邮件列中填充的是空白值,而不是空值。“小时费率”列中填充了0.00个值。

如果不小心添加了表中已经存在的列,MySQL将发出一个错误。例如,如果执行以下语句:

ALTER TABLE vendors
ADD COLUMN vendor_group INT NOT NULL;

MySQL发出了一条错误消息:

Error Code: 1060. Duplicate column name 'vendor_group'

对于只有几列的表,很容易看到哪些列已经存在。然而,对于一个有数百列的大表来说,这就更加困难了。

在某些情况下,在添加列之前,需要检查表中是否已经存在列。但是,如果不存在ADD COLUMN这样的语句,则不存在。幸运的是,您可以通过以下查询从information_schema数据库的columns表中获取这些信息:

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

在WHERE子句中,我们传递了三个参数:表模式或数据库、表名和列名。我们使用IF函数返回列是否存在。

在本教程中,您学习了如何使用MySQL add COLUMN语句向表中添加一个或多个列。