• MySQL向表中添加列


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

    简介

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

    说明:

    • 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],
    ...;
    
    • 1
    • 2
    • 3
    • 4

    举例

    创建一个表

    create database test;
    use test;
    
    create table if not exists vendor (
    	id int auto_increment primary key,
      name varchar(255)
    );
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    添加新列并指定位置

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

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

    alter table vendor
    add column vendor_group int not null;
    
    • 1
    • 2

    插入记录

    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);
    
    • 1
    • 2
    • 3
    • 4
    • 5

    同时添加两列

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

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

    检查vendor表中的数据

    select id, name, phone, vendor_group, email, hourly_rate
    from vendor;
    
    • 1
    • 2

    查询结果:

    +----+-----------+----------------+--------------+-------+-------------+
    | 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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

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

    添加表中已存在的列

    MySQL将发生错误

    alter table vendor
    add column vendor_group int not null;
    
    • 1
    • 2

    操作结果:

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

    检查表中是否已存在列

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

    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';
    
    • 1
    • 2
    • 3
    • 4
    • 5

    查询结果:

    +--------+
    | result |
    +--------+
    | Exist  |
    +--------+
    1 row in set (0.00 sec)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

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

    参考

    https://www.begtut.com/mysql/mysql-add-column.html

  • 相关阅读:
    深度跳转-scheme
    STL vector的操作
    pybind11 连接C++11和Python
    缓存一致性(cache coherency)解决方案:MESI 协议状态转换详解
    【模型推理优化学习笔记】张量并行和流水线并行简介
    苯丙氨酸甲酯双三氟甲基磺酰亚胺[PheC1][Tf2N]氨基酸酯离子液体
    2022.11.8每日刷题打卡
    docker搭建Jenkins及基本使用
    Java Web之JSP
    js如何定义二位数组然后转josn数据,ajax上传给php,php通过json_decode解析
  • 原文地址:https://blog.csdn.net/ln_ydc/article/details/127560296