首页Mysql修改表
Created At : 2021-11-13
Last Updated: 2021-12-05

Mysql修改表

Mysql使用ALTER TABLE语句修改表。

Mysql修改表指的是修改数据库中已经存在的数据表的结构,是Mysql中相对重要,也必将复杂的操作。

常用的修改表的操作有修改表名、修改字段数据类型或字段名、增加和删除字段、修改字段的排列位置、更改表的存储引擎、删除表的外键约束等。

修改表名

语法:

alter table 旧名 rename (to) 新名

操作演示:

show tables;
-- result
Tables_in_world|
---------------+
city           |
city1          |
country        |
countrylanguage|

alter table city1 rename city2;
show tables;

-- result
Tables_in_world|
---------------+
city           |
city2          |
country        |
countrylanguage|

修改表字段的数据类型

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

语法:

alter table 表名 modify 需要修改的字段名 修改后的数据类型

操作演示:

desc city2;
-- result
Field      |Type    |Null|Key|Default|Extra         |
-----------+--------+----+---+-------+--------------+
ID         |int     |NO  |PRI|       |auto_increment|
Name       |char(35)|NO  |   |       |              |

-- 我们需要给Name字段,修改为 varchar(100), 语句如下
alter table city2 modify Name varchar(100);
desc city2;

-- result
Field      |Type        |Null|Key|Default|Extra         |
-----------+------------+----+---+-------+--------------+
ID         |int         |NO  |PRI|       |auto_increment|
Name       |varchar(100)|YES |   |       |              |

修改表字段名

语法:

alter table 表名 change 旧字段名 新字段名 新的数据类型

操作演示:将city2表的Name字段修改为city_name

desc city2;
-- result
Field      |Type    |Null|Key|Default|Extra         |
-----------+--------+----+---+-------+--------------+
ID         |int     |NO  |PRI|       |auto_increment|
Name       |char(35)|NO  |   |       |              |

-- 操作如下
alter table city2 change Name city_name varchar(100);
desc city2;

-- result
Field      |Type        |Null|Key|Default|Extra         |
-----------+------------+----+---+-------+--------------+
ID         |int         |NO  |PRI|       |auto_increment|
city_name  |varchar(100)|YES |   |       |              |

CHANGE也可以只修改数据类型,实现和MODIFY同样的效果.

方法是将SQL语句中的“新字段名”和“旧字段名”设置为相同的名称,只改变“数据类型”。

添加字段

添加字段可能包括字段名、数据类型以及约束。

语法:

alter table 表名 add 新字段名 数据类型 约束添加 [first | after 已存在字段名]

FIRST为可选参数,其作用是将新添加的字段设置为表的第一个字段;

AFTER为可选参数,其作用是将新添加的字段添加到指定的“已存在字段名”的后面。

操作演示:

-- 添加一个无约束的remark字段
alter table city2 add remark varchar(100);
desc city2;
-- result
Field      |Type        |Null|Key|Default|Extra         |
-----------+------------+----+---+-------+--------------+
ID         |int         |NO  |PRI|       |auto_increment|
city_name  |varchar(100)|YES |   |       |              |
CountryCode|char(3)     |NO  |MUL|       |              |
District   |char(20)    |NO  |   |       |              |
Population |int         |NO  |   |0      |              |
remark     |varchar(100)|YES |   |       |              |

-- 添加一个有约束的字段 country_id, 不为null, 并位于city_name后面
alter table city2 add country_id int not null after city_name;
desc city2;

---result
Field      |Type        |Null|Key|Default|Extra         |
-----------+------------+----+---+-------+--------------+
ID         |int         |NO  |PRI|       |auto_increment|
city_name  |varchar(100)|YES |   |       |              |
country_id |int         |NO  |   |       |              |
CountryCode|char(3)     |NO  |MUL|       |              |
District   |char(20)    |NO  |   |       |              |
Population |int         |NO  |   |0      |              |
remark     |varchar(100)|YES |   |       |              |

删除字段

语法:

alter table 表名 drop 需要删除的字段名;

修改表的存储引擎和字符集

语法:

alter table 表名 engine = 更改后的存储引擎
-- 只修改表的存储引擎
alter table 表名 DEFAULT CHARACTER SET character_name [COLLATE...];
-- 如果是修改字段的字符集,还是change
alter table 表名 change 原字段名 新字段名 CHARACTER SET character_name [COLLATE ...];

修改整个表的存储引擎或字符集,可能会影响已有的数据存储,需要谨慎操作。

删除表的外键

对于数据库中定义的外键,如果不再需要,可以将其删除。

外键一旦删除,就会解除主表和从表间的关联关系,MySQL中删除外键的语法格式如下:

alter table 表名 drop foreign key 外键约束名称

日常操作示例大全

-- 待完善