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

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 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)


相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3天前
|
SQL 关系型数据库 MySQL
DQL操作MySql
DQL操作MySql
8 0
|
3天前
|
SQL Java 关系型数据库
【JAVA基础篇教学】第十六篇:Java连接和操作MySQL数据库
【JAVA基础篇教学】第十六篇:Java连接和操作MySQL数据库
|
4天前
|
SQL 关系型数据库 MySQL
MySQL基本操作——增删查改
MySQL基本操作——增删查改
9 2
|
12天前
|
SQL 存储 关系型数据库
【MySQL-6】DDL的表结构的数据类型盘点&案例演示
【MySQL-6】DDL的表结构的数据类型盘点&案例演示
|
12天前
|
SQL 关系型数据库 MySQL
【MySQL-4】简述SQLの通用语法及4种基本语句介绍(DDL/DML/DQL/DCL)
【MySQL-4】简述SQLの通用语法及4种基本语句介绍(DDL/DML/DQL/DCL)
|
12天前
|
SQL 关系型数据库 MySQL
【MySQL-5】DDL的数据库操作:查询&创建&删除&使用(可cv代码+演示图)
【MySQL-5】DDL的数据库操作:查询&创建&删除&使用(可cv代码+演示图)
|
12天前
|
SQL 存储 关系型数据库
【MySQL】DDL的表操作详解:创建&查询&修改&删除
【MySQL】DDL的表操作详解:创建&查询&修改&删除
|
13天前
|
SQL DataWorks 关系型数据库
DataWorks操作报错合集之DataWorks在同步mysql时报错Code:[Framework-02],mysql里面有个json类型字段,是什么原因导致的
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
30 0
|
3天前
|
关系型数据库 MySQL 数据库
docker MySQL删除数据库时的错误(errno: 39)
docker MySQL删除数据库时的错误(errno: 39)
10 0
|
1天前
|
关系型数据库 MySQL 数据库
mysql 设置环境变量与未设置环境变量连接数据库的区别
设置与未设置MySQL环境变量在连接数据库时主要区别在于命令输入方式和系统便捷性。设置环境变量后,可直接使用`mysql -u 用户名 -p`命令连接,而无需指定完整路径,提升便利性和灵活性。未设置时,需输入完整路径如`C:\Program Files\MySQL\...`,操作繁琐且易错。为提高效率和减少错误,推荐安装后设置环境变量。[查看视频讲解](https://www.bilibili.com/video/BV1vH4y137HC/)。
17 3
mysql 设置环境变量与未设置环境变量连接数据库的区别

推荐镜像

更多