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 外键约束名称
日常操作示例大全
-- 待完善