【MySQL】表结构的增删查改操作(DDL)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 修改表某个字段的名称

一. 创建表


语法:


create table [if not exists] 表名(
  field1 datatype,
  field2 datatype,
  field3 datatype
) [charset 字符集 collate 校验规则 engine 存储引擎];


说明:


[ ]内的可写可不写

field 表示字段名。

datatype 表示字段类型。

最后的字符集、校验规则和存储引擎可以不指定,这时就用默认的。

还可以在字段类型最后面加上comment '描述信息',用来描述该字段,这样在用desc查看表结构时可读性会更好。

举例:


1、先创建一个数据库,发现在该库的数据目录中只有一个叫做db.opt的库文件:


93f1e9e471ae48c99c77a5c59f308704.png


2、在库里创建一张叫做user_1的表,存储引擎采用MyISAM,发现在库的数据目录下多了三个表相关的文件:


ded58db553d44d45b4c7f021fab85a0c.png

PS:user_1表所使用的存储引擎是MyISAM ,所在库的数路径下多了三个不同的文件,它们的意义如下:


user_1.frm:描述表结构。

user_1.MYD:描述表数据。

user_1.MYI:描述表索引。


3、不同的存储引擎,创建表的文件不一样。接下来创建一个引擎是InnoDB的表user_2:


ef03d2d4b5c4444bb1658ec4d5887a71.png

继续观察数据库的数据目录,发现以存储引擎InnoDB创建的user_2表产生了两个文件:


user_2.frm:描述表结构。

user_2.ibd:描述表的数据和索引。


二. 删除表


语法:


drop table 表名;


举例:


// 1、查看当前库中所有的表
mysql> show tables;
+-------------------+
| Tables_in_ForTest |
+-------------------+
| user_1            |
| user_2            |
+-------------------+
2 rows in set (0.00 sec)
// 2、删除表user_1
mysql> drop table user_1;
Query OK, 0 rows affected (0.00 sec)
// 3、再次查看所有的表,发现user_1不在了
mysql> show tables;
+-------------------+
| Tables_in_ForTest |
+-------------------+
| user_2            |
+-------------------+
1 row in set (0.00 sec)




三. 查看表


1、输入show tables;来查看当前库下所有的表。记得table要加s:


// 1、首先进入ForTest这个数据库
mysql> use ForTest;
Database changed
// 2、查看当前库中所有的表
mysql> show tables;
+-------------------+
| Tables_in_ForTest |
+-------------------+
| user_1            |
| user_2            |
+-------------------+
2 rows in set (0.00 sec)



2、输入desc 表名;查看具体某张表的结构:


mysql> desc user_1;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| name  | varchar(32) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
1 row in set (0.01 sec)


表结构说明:

c86e09537cf4422fb39638862532cbef.png


3、输入show create table 表名;可以查看表创建时候的信息:


54557952d6554762bc912c6c99926670.png


PS:如果觉得这种横线的排版方式不方便看的话,还可以用 \G代替最后的分号以更简洁的排版方式输出表的创建信息:

b2fb7c0e651f49e38f1ba55705017d1d.png


四. 修改表


1、修改整张表的名称


语法:alter table 表的旧名称 rename [to] 新名称;


举例:先创建一张名叫employee的表,然后把表名改成users:


mysql> create table if not exists employee(
    -> ame varchar(32),
    -> age smallint
    -> );
Query OK, 0 rows affected (0.04 sec)
mysql> show tables;
+-------------------+
| Tables_in_ForTest |
+-------------------+
| employee          |
+-------------------+
1 row in set (0.00 sec)
mysql> alter table employee rename to users;
Query OK, 0 rows affected (0.01 sec)
mysql> show tables;
+-------------------+
| Tables_in_ForTest |
+-------------------+
| users             |
+-------------------+


2、修改表某个字段的名称


语法:alter table 表名 change 旧字段名称 新字段名称 类型...;


注意:相当于重写定义字段。


举例:


mysql> desc users;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| ame   | varchar(32) | YES  |     | NULL    |       |
| age   | smallint(6) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
mysql> alter table users change ame name varchar(50);
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0
mysql> desc users;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| name  | varchar(50) | YES  |     | NULL    |       |
| age   | smallint(6) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)


3、修改表的字段类型


语法:alter table 表名 modify 原字段名称 修改后的类型;


说明:仅仅修改某个字段的类型。


举例:

修改age字段的类型为int:


mysql> desc users;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| name  | varchar(50) | YES  |     | NULL    |       |
| age   | smallint(6) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
mysql> alter table users modify age int;
Query OK, 0 rows affected (0.05 sec)
Records: 0  Duplicates: 0  Warnings: 0
mysql> desc users;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| name  | varchar(50) | YES  |     | NULL    |       |
| age   | int(11)     | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)


4、在表中添加一个字段


语法:alter table 表名 add 字段名称 类型...;


举例:

在表中新增一个gender字段,用来标识用户的性别:


mysql> desc users;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| name  | varchar(50) | YES  |     | NULL    |       |
| age   | int(11)     | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
mysql> alter table users add gender varchar(10);
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0
mysql> desc users;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| name   | varchar(50) | YES  |     | NULL    |       |
| age    | int(11)     | YES  |     | NULL    |       |
| gender | varchar(10) | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)



补充:

新插入的字段默认排到表的最后位置,如果想指定排到某个特定字段之后,新增时可以在最后添加:after 目标字段:

65db36187d104cd2a839bf55829aac08.png


5、在表中删除一个字段


语法:alter table 表名 drop 需要删除的字段名称;


举例:

删除表中的gender字段:


mysql> desc users;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| name   | varchar(50) | YES  |     | NULL    |       |
| gender | varchar(10) | YES  |     | NULL    |       |
| age    | int(11)     | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
mysql> alter table users drop gender;
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0
mysql> desc users;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| name  | varchar(50) | YES  |     | NULL    |       |
| age   | int(11)     | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
6月前
|
SQL 存储 关系型数据库
菜鸟之路Day29一一MySQL之DDL
本文《菜鸟之路Day29——MySQL之DDL》由作者blue于2025年5月2日撰写,主要介绍了MySQL中的数据定义语言(DDL)。文章详细讲解了DDL在数据库和表操作中的应用,包括数据库的查询、创建、使用与删除,以及表的创建、修改与删除。同时,文章还深入探讨了字段约束(如主键、外键、非空等)、常见数据类型(数值、字符串、日期时间类型)及表结构的查询与调整方法。通过示例代码,读者可以更好地理解并实践MySQL中DDL的相关操作。
242 11
|
3月前
|
存储 关系型数据库 MySQL
使用命令行cmd查询MySQL表结构信息技巧分享。
掌握了这些命令和技巧,您就能快速并有效地从命令行中查询MySQL表的结构信息,进而支持数据库维护、架构审查和优化等工作。
391 9
|
5月前
|
SQL 关系型数据库 MySQL
MySQL 5.6/5.7 DDL 失败残留文件清理指南
通过本文的指南,您可以更安全地处理 MySQL 5.6 和 5.7 版本中 DDL 失败后的残留文件,有效避免数据丢失和数据库不一致的问题。
|
10月前
|
SQL 监控 关系型数据库
MySQL如何优雅的执行DDL
在MySQL中优雅地执行DDL操作需要综合考虑性能、锁定和数据一致性等因素。通过使用在线DDL工具、分批次执行、备份和监控等最佳实践,可以在保障系统稳定性的同时,顺利完成DDL操作。本文提供的实践和案例分析为安全高效地执行DDL操作提供了详细指导。
489 14
|
SQL Java 关系型数据库
MySQL数据库基础:增删查改
本文详细介绍了数据库中常用数据类型的使用方法及其在Java中的对应类型,并演示了如何创建表、插入数据、查询数据(包括全列查询、指定列查询、去重查询、排序查询、条件查询和分页查询)、修改数据以及删除数据。此外,还特别强调了处理NULL值时的注意事项,以及在执行修改和删除操作时应谨慎使用条件语句,以避免误操作导致的数据丢失。
273 15
MySQL数据库基础:增删查改
|
存储 关系型数据库 MySQL
【探究Mysql表中的增删查改(进阶篇)】
【探究Mysql表中的增删查改(进阶篇)】
132 7
|
SQL 关系型数据库 MySQL
MySQL 更新1000万条数据和DDL执行时间分析
MySQL 更新1000万条数据和DDL执行时间分析
859 4
|
存储 关系型数据库 MySQL
深入解析MySQL数据存储机制:从表结构到物理存储
深入解析MySQL数据存储机制:从表结构到物理存储
1503 1
|
关系型数据库 MySQL 数据库
MySQL 复制A的表结构和数据到表B
在MySQL中复制表A至表B可通过不同方法实现。一种是先用`CREATE TABLE B LIKE A;`复制结构,再用`INSERT INTO B SELECT * FROM A;`填充数据。另一种更简便的方法是直接使用`CREATE TABLE B AS SELECT * FROM A;`一次性完成结构和数据的复制。还有一种高级方法是通过`SHOW CREATE TABLE A;`获取表A的创建语句,手动调整后创建表B,如有需要再用`INSERT INTO ... SELECT`复制数据。注意权限问题、跨数据库复制时需指定数据库名,以及大表复制时可能影响性能。
905 1

推荐镜像

更多