0

数据表的基本操作——修改数据表1(十五)

4.3  修改数据表

修改表指的是修改数据库中已经存在的数据表的结构。常用的修改表的操作有:修改表名、修改字段数据类型或字段名、增加和删除字段、修改字段的排列位置,更改表的存储引擎,删除表的外键约束等。本节将对和修改表有关的操作进行讲解。

4.3.1  修改表名

MySQL是通过ALTER TABLE语句来实现表名的修改的,具体的语法规则如下:

ALTER TABLE <旧表名> RENAME [TO] <新表名>;

其中TO为可选参数,使用与否均不影响结果。

【例4.13】将数据表tb_dept3改名为tb_department3

执行修改表名操作之前,使用SHOW TABLES查看数据库中所有的表。

mysql> SHOW TABLES;

+---------------------+

| Tables_in_test    |

+---------------------+

| tb_dept1         |

| tb_dept2        |

| tb_dept3        |

  

           省略部分内容

  

使用ALTER TABLE将表tb_dept3改名为tb_department3SQL语句如下:

ALTER TABLE tb_dept3 RENAME tb_department3;

语句执行之后,检验表tb_dept3是否改名成功。使用SHOW TABLES查看数据库中的表,结果如下:

mysql> SHOW TABLES;

+---------------------+

| Tables_in_test    |

+---------------------+

| tb_department3  |

| tb_dept         |

| tb_dept2        |

           省略部分内容

经过比较可以看到数据表列表中已经有了名称为tb_department3的表。


 

4.3.2  修改字段的数据类型

修改字段的数据类型,就是把字段的数据类型转换成另一种数据类型。在MySQL中修改字段数据类型的语法规则如下:

ALTER TABLE <表名> MODIFY <字段名>  <数据类型>

其中“表名”指要修改数据类型的字段所在表的名称,“字段名”指需要修改的字段,“数据类型”指修改后字段的新数据类型。

【例4.14】将数据表tb_dept1name字段的数据类型由VARCHAR(22)的修改成VARCHAR(30)

执行修改字段数据类型操作之前,使用DESC查看tb_dept表结构,结果如下:

mysql> DESC tb_dept1;

+----------+---------------+---------+--------+-------------+-------+

| Field   | Type       | Null  | Key   |Default   | Extra |

+----------+---------------+---------+--------+-------------+-------+

| id      | int(11)     | NO   | PRI   | NULL   |     |

| name   | varchar(22)  | YES  |       | NULL   |     |

| location | varchar(50)  | YES  |      | NULL    |     |

+----------+---------------+--------+---------+-------------+-------+

3 rows in set (0.00 sec)

可以看到现在name字段的数据类型为VARCHAR(22),下面修改其类型。输入如下SQL语句并执行。

ALTER TABLE tb_dept1 MODIFY name VARCHAR(30);

再次使用DESC查看表,结果如下:

mysql> DESC tb_dept1;

+----------+---------------+---------+--------+-------------+-------+

| Field   | Type       | Null  | Key   |Default   | Extra |

+----------+---------------+---------+--------+-------------+-------+

| id      | int(11)     | NO   | PRI   | NULL   |     |

| name   | varchar(30)  | YES  |       | NULL   |     |

| location | varchar(50)  | YES  |      | NULL    |     |

+----------+---------------+--------+---------+-------------+-------+

3 rows in set (0.00 sec)

语句执行之后,检验会发现表tb_dept表中name字段的数据类型已经修改成了VARCHAR(30),修改成功。

4.3.3  修改字段名

MySQL中修改表字段名的语法规则如下:

ALTER TABLE <表名> CHANGE <旧字段名> <新字段名> <新数据类型>;

其中,“旧字段名”指修改前的字段名;“新字段名”指修改后的字段名;“新数据类型”指修改后的数据类型,如果不需要修改字段的数据类型,可以将新数据类型设置成与原来一样即可,但数据类型不能为空。

【例4.15】将数据表tb_dept1中的location字段名称改为loc,数据类型保持不变,SQL语句如下:

ALTER TABLE tb_dept1 CHANGE location loc VARCHAR(50);

使用DESC查看表tb_dept1,会发现字段的名称已经修改成功,结果如下:

mysql> DESC tb_dept1;

+----------+---------------+---------+--------+-------------+-------+

| Field   | Type       | Null  | Key   |Default   | Extra |

+----------+---------------+---------+--------+-------------+-------+

| id      | int(11)     | NO   | PRI   | NULL   |     |

| name   | varchar(30)  | YES  |       | NULL   |     |

| loc     | varchar(50)  | YES  |      | NULL    |     |

+----------+---------------+--------+---------+-------------+-------+

3 rows in set (0.00 sec)

【例4.16】将数据表tb_dept1中的loc字段名称改为location,同时将数据类型保持变为VARCHAR(60)SQL语句如下:

ALTER TABLE tb_dept1CHANGE loc location  VARCHAR(60);

使用DESC查看表tb_dept1,会发现字段的名称和数据类型均已经修改成功,结果如下:

mysql> DESC tb_dept1;

+----------+---------------+---------+--------+-------------+-------+

| Field   | Type       | Null  | Key   |Default   | Extra |

+----------+---------------+---------+--------+-------------+-------+

| id      | int(11)     | NO   | PRI   | NULL   |     |

| name   | varchar(30)  | YES  |       | NULL   |     |

| location | varchar(60)  | YES  |      | NULL    |     |

+----------+---------------+--------+---------+-------------+-------+

3 rows in set (0.00 sec)

技巧:CHANGE也可以只修改数据类型,实现和MODIFY同样的效果,方法是将SQL语句中的“新字段名”和“旧字段名”设置为相同的名称,只改变“数据类型”。