欢迎光临散文网 会员登陆 & 注册

MySQL向表中添加列

2022-10-27 21:04 作者:限量版范儿  | 我要投稿

我们使用alter table add column语句向现有表中添加新列。

简介

alter table table_name add [column] column_name column_definition [first|after existing_column];

说明:

  • alter table子句后指定表名;

  • column关键字是可选的,可以省略它;

  • 可以通过first关键字将新列添加为表的第一列,也可以使用after existing_column子句在现有列之后添加新列,如果没有明确指定会将其添加为最后一列;

若要向表中添加两个或更多列,使用下面语法:

alter table table_name add [column] column_name column_definition [first|after existing_column], add [column] column_name column_definition [first|after existing_column], ...;

举例

创建一个表

create database test; use test; create table if not exists vendor ( id int auto_increment primary key,  name varchar(255) );

添加新列并指定位置

alter table vendor add column phone varchar(15) after name;

添加新列但不指定新列位置

alter table vendor add column vendor_group int not null;

插入记录

insert into vendor(name, phone, vendor_group) values('IBM', '(408)-298-2987', 1); insert into vendor(name, phone, vendor_group) values('Microsoft', '(408)-298-2988', 1);

同时添加两列

alter table vendor add column email varchar(100) not null, add column hourly_rate decimal(10, 2) not null;

注意:email和hourly_rate两列都是not null,但是vendor表已经有数据了,在这种情况下,MySQL将使用这些新列的默认值。

检查vendor表中的数据

select id, name, phone, vendor_group, email, hourly_rate from vendor;

查询结果:

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

email列中填充了空值,而不是NULL值,hourly_rate列填充了0.00

添加表中已存在的列

MySQL将发生错误

alter table vendor add column vendor_group int not null;

操作结果:

ERROR 1060 (42S21): Duplicate column name 'vendor_group'

检查表中是否已存在列

对于几列的表,很容易看到哪些列已经存在,如果有一个饮食数百列的大表,那就比较费劲了

select if(count(*) = 1, 'Exist', 'Not Exist') as result from information_schema.columns where table_schema = 'test' and table_name = 'vendor' and column_name = 'phone';

查询结果:

+--------+ | result | +--------+ | Exist  | +--------+ 1 row in set (0.00 sec)

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

链接:https://www.dianjilingqu.com/589058.html


MySQL向表中添加列的评论 (共 条)

分享到微博请遵守国家法律