mysql数据库表增添字段,删除字段,修改字段的排列等操作

bangongJIAO1@c 发布于 2025-11-29 阅读(2)
目录
  • 一、mysql修改表名
  • 二、mysql修改数据的字段类型
  • 三、mysql修改字段名
  • 四、mysql添加字段
    • 1、添加没有约束性的字段
    • 2、添加一个有约束性的字段
    • 3、在表的第一列添加一个字段
    • 4、在数据表中指定列之后添加一个字段
  • 五、mysql删除字段
    • 六、mysql修改字段的排列位置
      • 1、修改字段为表的第一个字段
      • 2、修改字段为指定列后面
    • 七、mysql更改表的存储引擎

      修改表指的是修改数据库之后中已经存在的数据表的结构。​​mysql​​​使用​​alter table​​语句修改表。常用的修改表的操作有修改表名、修改字段数据类型或者字段名、增加和删除字段、修改字段的排列位置、更改表的存储引擎、删除表的外键约束等。

      一、mysql修改表名

      语法:

      ALTER TABLE <旧表名> RENAME [to] <新表名>

      上面语句中的​​to​​为可选,存在与否不影响运行结果。

      举个栗子:

      将​​test_user_2​​​这个数据表,改名为​​test_user_two​​;

      首先我们查看下原来的内容;

      mysql> show tables;
      +-------------------+
      | Tables_in_test_db |
      +-------------------+
      | test_dept |
      | test_user |
      | test_user_2 |
      | test_user_3 |
      | test_user_4 |
      | test_user_5 |
      | test_user_6 |
      | test_user_7 |
      | test_user_8 |
      | test_user_9 |
      +-------------------+
      10 rows in set (0.00 sec)
      
      mysql>

      然后我们执行语句:

      mysql> alter table test_user_2 rename test_user_two;
      Query OK, 0 rows affected (0.03 sec)
      
      mysql>

      然后再看下是否修改完毕了;

      mysql> show tables;
      +-------------------+
      | Tables_in_test_db |
      +-------------------+
      | test_dept |
      | test_user |
      | test_user_3 |
      | test_user_4 |
      | test_user_5 |
      | test_user_6 |
      | test_user_7 |
      | test_user_8 |
      | test_user_9 |
      | test_user_two |
      +-------------------+
      10 rows in set (0.00 sec)
      
      mysql>

      注意:修改的只是数据表名,实际上字段和数据内容都没有发生变化。

      二、mysql修改数据的字段类型

      修改字段的数据类型,就是把字段的数据类型转换成另一种数据类型。

      语法:

      alter table <表名> modify <字段名> <数据类型>

      举个栗子:

      修改​​test_user_two​​​这个表中的​​money​​​字段的数据类型,由​​float​​​改为​​int​​类型。

      首先看下这个表中的数据结构;

      mysql> desc test_user_two;
      +--------+-------------+------+-----+---------+-------+
      | Field | Type | Null | Key | Default | Extra |
      +--------+-------------+------+-----+---------+-------+
      | id | int | NO | PRI | NULL | |
      | name | varchar(25) | YES | | NULL | |
      | deptid | int | YES | | NULL | |
      | money | float | YES | | NULL | |
      +--------+-------------+------+-----+---------+-------+
      4 rows in set (0.01 sec)
      
      mysql>

      然后执行如下语句进行修改;

      mysql> alter table test_user_two modify money int;
      Query OK, 0 rows affected (0.09 sec)
      Records: 0 Duplicates: 0 Warnings: 0
      
      mysql>

      修改完毕之后我们再看下​​test_user_db​​这个表中的数据结构是否发生变化了。

      mysql> desc test_user_two;
      +--------+-------------+------+-----+---------+-------+
      | Field | Type | Null | Key | Default | Extra |
      +--------+-------------+------+-----+---------+-------+
      | id | int | NO | PRI | NULL | |
      | name | varchar(25) | YES | | NULL | |
      | deptid | int | YES | | NULL | |
      | money | int | YES | | NULL | |
      +--------+-------------+------+-----+---------+-------+
      4 rows in set (0.00 sec)
      
      mysql>

      三、mysql修改字段名

      语法:

      alter table <表名> change <旧字段名> <新字段名> <新数据类型>;

      举个栗子:

      将​​test_user_two​​​表中的​​money​​​字段改成​​howmoney​​​,数据类型为​​int​​;

      执行语句:

      mysql> alter table test_user_two change money howmoney int;
      Query OK, 0 rows affected (0.03 sec)
      Records: 0 Duplicates: 0 Warnings: 0
      
      mysql>

      然后我们再看下此时这个​​test_user_two​​数据库的数据结构是什么;

      mysql> desc test_user_two;
      +----------+-------------+------+-----+---------+-------+
      | Field | Type | Null | Key | Default | Extra |
      +----------+-------------+------+-----+---------+-------+
      | id | int | NO | PRI | NULL | |
      | name | varchar(25) | YES | | NULL | |
      | deptid | int | YES | | NULL | |
      | howmoney | int | YES | | NULL | |
      +----------+-------------+------+-----+---------+-------+
      4 rows in set (0.00 sec)
      
      mysql>

      可以看到,已经将字段修改完毕了。

      四、mysql添加字段

      语法:

      alter table <表名> add <新字段名> <数据类型> [约束条件] [first | after 已存在字段名]

      新字段名为需要添加的字段的名称;​​first​​​为可选参数,其作用是将新添加的字段设置为表的第一个字段;​​after​​为可选参数,其作用是将新添加的字段添加到指定的“已存在字段名” 的后面。

      ​first​​​或​​after 已存在字段名​​​用于指定新增字段在表中的位置,如果​​SQL​​语句中没有这两个参数,则默认将新添加的字段设置为数据表的最后一列。

      举几个栗子:

      1、添加没有约束性的字段

      在数据表​​test_user_two​​​中添加一个没有完整性约束的​​int​​​类型的字段​​year​​(入职几年);

      执行​​sql​​如下:

      mysql> alter table test_user_two add year int;
      Query OK, 0 rows affected (0.04 sec)
      Records: 0 Duplicates: 0 Warnings: 0
      
      mysql>

      然后我们查看下修改之后的表结构;

      mysql> desc test_user_two;
      +----------+-------------+------+-----+---------+-------+
      | Field | Type | Null | Key | Default | Extra |
      +----------+-------------+------+-----+---------+-------+
      | id | int | NO | PRI | NULL | |
      | name | varchar(25) | YES | | NULL | |
      | deptid | int | YES | | NULL | |
      | howmoney | int | YES | | NULL | |
      | year | int | YES | | NULL | |
      +----------+-------------+------+-----+---------+-------+
      5 rows in set (0.00 sec)
      
      mysql>

      2、添加一个有约束性的字段

      在​​test_user_two​​​表中添加一个名为​​year1​​​,数据类型是​​int​​,且不可为空的字段;

      执行相关​​sql​​语句;

      mysql> alter table test_user_two add year1 int not null;
      Query OK, 0 rows affected (0.02 sec)
      Records: 0 Duplicates: 0 Warnings: 0
      
      mysql>

      看下表结构;

      mysql> desc test_user_two;
      +----------+-------------+------+-----+---------+-------+
      | Field | Type | Null | Key | Default | Extra |
      +----------+-------------+------+-----+---------+-------+
      | id | int | NO | PRI | NULL | |
      | name | varchar(25) | YES | | NULL | |
      | deptid | int | YES | | NULL | |
      | howmoney | int | YES | | NULL | |
      | year | int | YES | | NULL | |
      | year1 | int | NO | | NULL | |
      +----------+-------------+------+-----+---------+-------+
      6 rows in set (0.00 sec)
      
      mysql>

      3、在表的第一列添加一个字段

      在​​test_user_two​​​数据表第一列添加一个名字​​year2​​​,数据类型是​​int​​的字段。

      执行相关​​sql​​语句;

      mysql> alter table test_user_two add year2 int first;
      Query OK, 0 rows affected (0.02 sec)
      Records: 0 Duplicates: 0 Warnings: 0
      
      mysql>

      看下修改之后的表结构是什么;

      mysql> desc test_user_two;
      +----------+-------------+------+-----+---------+-------+
      | Field | Type | Null | Key | Default | Extra |
      +----------+-------------+------+-----+---------+-------+
      | year2 | int | YES | | NULL | |
      | id | int | NO | PRI | NULL | |
      | name | varchar(25) | YES | | NULL | |
      | deptid | int | YES | | NULL | |
      | howmoney | int | YES | | NULL | |
      | year | int | YES | | NULL | |
      | year1 | int | NO | | NULL | |
      +----------+-------------+------+-----+---------+-------+
      7 rows in set (0.00 sec)
      
      mysql>

      4、在数据表中指定列之后添加一个字段

      在​​test_user_two​​​这个数据库中​​name​​​字段之后,添加一个名为​​name2​​​,数据类型是​​varchar(50)​​的字段;

      执行​​sql​​语句;

      mysql> alter table test_user_two add name2 varchar(50) after name;
      Query OK, 0 rows affected (0.02 sec)
      Records: 0 Duplicates: 0 Warnings: 0
      
      mysql>

      可以再次看下表结构;

      mysql> desc test_user_two;
      +----------+-------------+------+-----+---------+-------+
      | Field | Type | Null | Key | Default | Extra |
      +----------+-------------+------+-----+---------+-------+
      | year2 | int | YES | | NULL | |
      | id | int | NO | PRI | NULL | |
      | name | varchar(25) | YES | | NULL | |
      | name2 | varchar(50) | YES | | NULL | |
      | deptid | int | YES | | NULL | |
      | howmoney | int | YES | | NULL | |
      | year | int | YES | | NULL | |
      | year1 | int | NO | | NULL | |
      +----------+-------------+------+-----+---------+-------+
      8 rows in set (0.00 sec)
      
      mysql>

      可以看到,每次我们都会对这个表结构进行相关的修改。

      五、mysql删除字段

      语法:

      alter table <表名> drop <字段名>;

      举个栗子;

      比如我们想将​​test_user_two​​​数据库中刚添加的​​year2​​字段删除;

      执行​​sql​​语句为:

      看下表结构;

      mysql> desc test_user_two;
      +----------+-------------+------+-----+---------+-------+
      | Field | Type | Null | Key | Default | Extra |
      +----------+-------------+------+-----+---------+-------+
      | id | int | NO | PRI | NULL | |
      | name | varchar(25) | YES | | NULL | |
      | name2 | varchar(50) | YES | | NULL | |
      | deptid | int | YES | | NULL | |
      | howmoney | int | YES | | NULL | |
      | year | int | YES | | NULL | |
      | year1 | int | NO | | NULL | |
      +----------+-------------+------+-----+---------+-------+
      7 rows in set (0.00 sec)
      
      mysql>

      可以看到已经将名为​​year2​​的字段进行删除了。

      六、mysql修改字段的排列位置

      有时候我们会面临修改数据表中某些字段的排列位置,比如说将某一个字段排到第一个,或者是将某个字段后移,看下如何操作。

      语法:

      alter table <表名> modify <字段1> <数据类型> first | after <字段2>;

      “字段1” 指要修改位置的字段;“数据类型” 指 “字段1” 的数据类型;“​​First​​​” 为可选参数,指将 “字段1” 修改为表的第一个字段;“​​after​​ 字段2” 指将 “字段1” 插入到 “字段2” 后面。

      举两个栗子;

      1、修改字段为表的第一个字段

      比如我们将​​test_user_two​​​这个数据表中名为​​name2​​的字段,修改成这个对应数据表中第一个字段;

      执行​​sql​​语句;

      mysql> alter table test_user_two modify name2 varchar(50) first;
      Query OK, 0 rows affected (0.08 sec)
      Records: 0 Duplicates: 0 Warnings: 0
      
      mysql>

      查看下表结构;

      mysql> desc test_user_two;
      +----------+-------------+------+-----+---------+-------+
      | Field | Type | Null | Key | Default | Extra |
      +----------+-------------+------+-----+---------+-------+
      | name2 | varchar(50) | YES | | NULL | |
      | id | int | NO | PRI | NULL | |
      | name | varchar(25) | YES | | NULL | |
      | deptid | int | YES | | NULL | |
      | howmoney | int | YES | | NULL | |
      | year | int | YES | | NULL | |
      | year1 | int | NO | | NULL | |
      +----------+-------------+------+-----+---------+-------+
      7 rows in set (0.00 sec)
      
      mysql>

      可以看到我们已经成功将​​name2​​这个字段修改成第一个字段了;

      2、修改字段为指定列后面

      比如我们将​​test_user_two​​​这个表中的​​name2​​​字段,让他移动到​​year​​这个字段后面;

      执行​​sql​​语句;

      mysql> alter table test_user_two modify name2 varchar(50) after year;
      Query OK, 0 rows affected (0.06 sec)
      Records: 0 Duplicates: 0 Warnings: 0
      
      mysql>

      看下表结构;

      mysql> desc test_user_two;
      +----------+-------------+------+-----+---------+-------+
      | Field | Type | Null | Key | Default | Extra |
      +----------+-------------+------+-----+---------+-------+
      | id | int | NO | PRI | NULL | |
      | name | varchar(25) | YES | | NULL | |
      | deptid | int | YES | | NULL | |
      | howmoney | int | YES | | NULL | |
      | year | int | YES | | NULL | |
      | name2 | varchar(50) | YES | | NULL | |
      | year1 | int | NO | | NULL | |
      +----------+-------------+------+-----+---------+-------+
      7 rows in set (0.00 sec)
      
      mysql>

      可以发现,已经将​​test_user_two​​​这个数据库中的​​name2​​​字段,移动到了​​year​​字段之后。

      七、mysql更改表的存储引擎

      存储引擎是​​mysql​​​中的数据存储在文件或者内存中时采用的不用技术实现。可以根据自己所需,选择不同的引擎,也可以为每一张表选择不用的存储引擎。可以使用​​show engines;​​语句来查看系统支持的存储引擎。

      mysql> show engines;
      +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
      | Engine | Support | Comment | Transactions | XA | Savepoints |
      +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
      | MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
      | MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
      | CSV | YES | CSV storage engine | NO | NO | NO |
      | FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL |
      | PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO |
      | MyISAM | YES | MyISAM storage engine | NO | NO | NO |
      | InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
      | BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO |
      | ARCHIVE | YES | Archive storage engine | NO | NO | NO |
      +--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
      9 rows in set (0.00 sec)
      
      mysql>

      更改表的存储引擎的语法:

      alter table <表名> engine=<更改后的存储引擎名>