MySQL-表的基本操作(二)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: MySQL-表的基本操作

三、修改数据表


修改表名

语法:

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

例:

查看所有表,修改test1表改名为file1。

1. mysql> show tables;
2. +---------------+
3. | Tables_in_bbs |
4. +---------------+
5. | test1         |
6. +---------------+
7. 1 row in set (0.01 sec)
8. 
9. mysql> alter table test1 rename file1;
10. Query OK, 0 rows affected (0.03 sec)
11. 
12. mysql> show tables;
13. +---------------+
14. | Tables_in_bbs |
15. +---------------+
16. | file1         |
17. +---------------+
18. 1 row in set (0.00 sec)

修改字段数据类型

语法:

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

例:

查看file1表结构,修改name列数据类型为varchar(50)。

1. mysql> desc file1;
2. +--------+-------------+------+-----+---------+-------+
3. | Field  | Type        | Null | Key | Default | Extra |
4. +--------+-------------+------+-----+---------+-------+
5. | id     | int(11)     | NO   | PRI | NULL    |       |
6. | name   | varchar(20) | NO   |     | NULL    |       |
7. | deptid | int(11)     | YES  |     | NULL    |       |
8. | salary | float       | YES  |     | NULL    |       |
9. +--------+-------------+------+-----+---------+-------+
10. 4 rows in set (0.09 sec)
11. 
12. mysql> alter table file1 modify name varchar(50);
13. Query OK, 0 rows affected (0.04 sec)
14. Records: 0  Duplicates: 0  Warnings: 0
15. 
16. mysql> desc file1;
17. +--------+-------------+------+-----+---------+-------+
18. | Field  | Type        | Null | Key | Default | Extra |
19. +--------+-------------+------+-----+---------+-------+
20. | id     | int(11)     | NO   | PRI | NULL    |       |
21. | name   | varchar(50) | YES  |     | NULL    |       |
22. | deptid | int(11)     | YES  |     | NULL    |       |
23. | salary | float       | YES  |     | NULL    |       |
24. +--------+-------------+------+-----+---------+-------+
25. 4 rows in set (0.00 sec)

修改字段名

语法:

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

例:

修改file1表name列名为new_name,数据类型为varchar(20);

1. mysql> alter table file1 change name new_name varchar(20);
2. Query OK, 0 rows affected (0.04 sec)
3. Records: 0  Duplicates: 0  Warnings: 0
4. 
5. mysql> desc file1;
6. +----------+-------------+------+-----+---------+-------+
7. | Field    | Type        | Null | Key | Default | Extra |
8. +----------+-------------+------+-----+---------+-------+
9. | id       | int(11)     | NO   | PRI | NULL    |       |
10. | new_name | varchar(20) | YES  |     | NULL    |       |
11. | deptid   | int(11)     | YES  |     | NULL    |       |
12. | salary   | float       | YES  |     | NULL    |       |
13. +----------+-------------+------+-----+---------+-------+
14. 4 rows in set (0.00 sec)

添加字段

语法:

ALTER TABLE <表名> ADD <新字段名><数据类型> [约束条件] [FIRST|AFTER 已存在字段名]

例:

在file1表末尾添加location列。

1. mysql> desc file1;
2. +----------+-------------+------+-----+---------+-------+
3. | Field    | Type        | Null | Key | Default | Extra |
4. +----------+-------------+------+-----+---------+-------+
5. | id       | int(11)     | NO   | PRI | NULL    |       |
6. | new_name | varchar(20) | YES  |     | NULL    |       |
7. | deptid   | int(11)     | YES  |     | NULL    |       |
8. | salary   | float       | YES  |     | NULL    |       |
9. +----------+-------------+------+-----+---------+-------+
10. 4 rows in set (0.00 sec)
11. 
12. mysql> alter table file1 add location varchar(50);
13. Query OK, 0 rows affected (0.02 sec)
14. Records: 0  Duplicates: 0  Warnings: 0
15. 
16. mysql> desc file1;
17. +----------+-------------+------+-----+---------+-------+
18. | Field    | Type        | Null | Key | Default | Extra |
19. +----------+-------------+------+-----+---------+-------+
20. | id       | int(11)     | NO   | PRI | NULL    |       |
21. | new_name | varchar(20) | YES  |     | NULL    |       |
22. | deptid   | int(11)     | YES  |     | NULL    |       |
23. | salary   | float       | YES  |     | NULL    |       |
24. | location | varchar(50) | YES  |     | NULL    |       |
25. +----------+-------------+------+-----+---------+-------+
26. 5 rows in set (0.00 sec)

在file1表首行添加mail列。

1. mysql> alter table file1 add mail float first;
2. Query OK, 0 rows affected (0.01 sec)
3. Records: 0  Duplicates: 0  Warnings: 0
4. 
5. mysql> desc file1;
6. +----------+-------------+------+-----+---------+-------+
7. | Field    | Type        | Null | Key | Default | Extra |
8. +----------+-------------+------+-----+---------+-------+
9. | mail     | float       | YES  |     | NULL    |       |
10. | id       | int(11)     | NO   | PRI | NULL    |       |
11. | new_name | varchar(20) | YES  |     | NULL    |       |
12. | deptid   | int(11)     | YES  |     | NULL    |       |
13. | salary   | float       | YES  |     | NULL    |       |
14. | location | varchar(50) | YES  |     | NULL    |       |
15. | email    | float       | YES  |     | NULL    |       |
16. +----------+-------------+------+-----+---------+-------+
17. 7 rows in set (0.00 sec)

删除字段

语法:

ALTER TABLE <表名> DROP <字段名>

例:

1. mysql> alter table file1 drop mail;
2. Query OK, 0 rows affected (0.02 sec)
3. Records: 0  Duplicates: 0  Warnings: 0
4. 
5. mysql> desc file1;
6. +----------+-------------+------+-----+---------+-------+
7. | Field    | Type        | Null | Key | Default | Extra |
8. +----------+-------------+------+-----+---------+-------+
9. | id       | int(11)     | NO   | PRI | NULL    |       |
10. | new_name | varchar(20) | YES  |     | NULL    |       |
11. | deptid   | int(11)     | YES  |     | NULL    |       |
12. | salary   | float       | YES  |     | NULL    |       |
13. | location | varchar(50) | YES  |     | NULL    |       |
14. +----------+-------------+------+-----+---------+-------+
15. 5 rows in set (0.00 sec)

修改排列位置

语法:

ALTER TABLE <表名> MODIFY <字段名> <数据类型> FIRST | AFTER <字段2>

例:

修改location列到首行。

1. mysql> alter table file1 modify location varchar(50) first;
2. Query OK, 0 rows affected (0.01 sec)
3. Records: 0  Duplicates: 0  Warnings: 0
4. 
5. mysql> desc file1;
6. +----------+-------------+------+-----+---------+-------+
7. | Field    | Type        | Null | Key | Default | Extra |
8. +----------+-------------+------+-----+---------+-------+
9. | location | varchar(50) | YES  |     | NULL    |       |
10. | id       | int(11)     | NO   | PRI | NULL    |       |
11. | new_name | varchar(20) | YES  |     | NULL    |       |
12. | deptid   | int(11)     | YES  |     | NULL    |       |
13. | salary   | float       | YES  |     | NULL    |       |
14. +----------+-------------+------+-----+---------+-------+
15. 5 rows in set (0.00 sec)

修改location列到new_name列下。

1. mysql> alter table file1 modify location varchar(20) after new_name;
2. Query OK, 0 rows affected (0.03 sec)
3. Records: 0  Duplicates: 0  Warnings: 0
4. 
5. mysql> desc file1;
6. +----------+-------------+------+-----+---------+-------+
7. | Field    | Type        | Null | Key | Default | Extra |
8. +----------+-------------+------+-----+---------+-------+
9. | id       | int(11)     | NO   | PRI | NULL    |       |
10. | new_name | varchar(20) | YES  |     | NULL    |       |
11. | location | varchar(20) | YES  |     | NULL    |       |
12. | deptid   | int(11)     | YES  |     | NULL    |       |
13. | salary   | float       | YES  |     | NULL    |       |
14. +----------+-------------+------+-----+---------+-------+
15. 5 rows in set (0.00 sec)

修改存储引擎

语法:

ALTER TABLE <表名> ENGINE=<更改后的存储引擎>

例:

查看表结构,引擎为ENGINE=InnoDB,修改表引擎后为ENGINE=MyISAM。

1. mysql> show create table file1;
2. #省略部分内容
3. | file1 | CREATE TABLE `file1` (
4.   `id` int(11) NOT NULL,
5.   `new_name` varchar(20) DEFAULT NULL,
6.   `location` varchar(20) DEFAULT NULL,
7.   `deptid` int(11) DEFAULT NULL,
8.   `salary` float DEFAULT NULL,
9.   PRIMARY KEY (`id`)
10. ) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
11. #省略部分内容
12. 1 row in set (0.01 sec)
13. mysql> alter table file1 engine=myisam;
14. Query OK, 0 rows affected (0.02 sec)
15. Records: 0  Duplicates: 0  Warnings: 0
16. 
17. mysql> show create table file1;
18. #省略部分内容
19. | file1 | CREATE TABLE `file1` (
20.   `id` int(11) NOT NULL,
21.   `new_name` varchar(20) DEFAULT NULL,
22.   `location` varchar(20) DEFAULT NULL,
23.   `deptid` int(11) DEFAULT NULL,
24.   `salary` float DEFAULT NULL,
25.   PRIMARY KEY (`id`)
26. ) ENGINE=MyISAM DEFAULT CHARSET=latin1 |
27. #省略部分内容
28. 1 row in set (0.01 sec)
29. ###如无其他需求则改回innodb,才可以进行下面的操作
30. mysql> alter table file1 engine innodb;
31. Query OK, 0 rows affected (0.02 sec)
32. Records: 0  Duplicates: 0  Warnings: 0

删除表外键约束

语法:

ALTER TABLE <表名> DROP FOREIGN KEY <外键约束名>

例:

没有外键需要先创建,如果修改过储存引擎需要修改回”innodb“才可以创建外键。查看file2表结构,表明file2表中的deptid列外键约束于file1表中的id列;删除操作后,查看到没有外键约束了。

1. mysql> create table file2(
2.     -> id int primary key,
3.     -> name varchar(20),
4.     -> deptid int,
5.     -> constraint file_key foreign key (deptid) references file1(id));
6. Query OK, 0 rows affected (0.01 sec)
7. mysql> show create table file2;
8. #省略部分内容
9. | file2 | CREATE TABLE `file2` (
10.   `id` int(11) NOT NULL,
11.   `name` varchar(20) DEFAULT NULL,
12.   `deptid` int(11) DEFAULT NULL,
13.   PRIMARY KEY (`id`),
14.   KEY `file_key` (`deptid`),
15.   CONSTRAINT `file_key` FOREIGN KEY (`deptid`) REFERENCES `file1` (`id`)
16. ) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
17. #省略部分内容
18. 1 row in set (0.02 sec)
19. mysql> alter table file2 drop foreign key file_key;
20. Query OK, 0 rows affected (0.02 sec)
21. Records: 0  Duplicates: 0  Warnings: 0
22. 
23. mysql> show create table file2;
24. #省略部分内容
25. | file2 | CREATE TABLE `file2` (
26.   `id` int(11) NOT NULL,
27.   `name` varchar(20) DEFAULT NULL,
28.   `deptid` int(11) DEFAULT NULL,
29.   PRIMARY KEY (`id`),
30.   KEY `file_key` (`deptid`)
31. ) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
32. #省略部分内容
33. 1 row in set (0.00 sec)

删除唯一约束

alter table 表名 drop index 约束名称;

drop index 约束名称 on 表名;

四、删除数据表


删除没有被关联的表

语法:

DROP TABLE [IF EXISTS]表1,表2...

例:

参考上面命令创建test1表、test2表,查看所有表并删除test1表、test2表。

1. mysql> show tables;
2. +---------------+
3. | Tables_in_bbs |
4. +---------------+
5. | file1         |
6. | file2         |
7. | test1         |
8. | test2         |
9. +---------------+
10. 4 rows in set (0.00 sec)
11. mysql> drop table if exists test1,test2;
12. Query OK, 0 rows affected (0.02 sec)
13. 
14. mysql> show tables;
15. +---------------+
16. | Tables_in_bbs |
17. +---------------+
18. | file1         |
19. | file2         |
20. +---------------+
21. 2 rows in set (0.01 sec)

删除被关联的主表

还是创建两个test表,test2表的deptid列指定test1表的id列。

1. mysql> create table test1(
2.     -> id int primary key,
3.     -> name varchar(20),
4.     -> location varchar(50));
5. Query OK, 0 rows affected (0.01 sec)
6. 
7. mysql> create table test2(
8.     -> id int primary key,
9.     -> name varchar(20),
10.     -> deptid int,
11.     -> salary float,
12.     -> constraint test_key foreign key(deptid) references test1(id));
13. Query OK, 0 rows affected (0.01 sec)

这时候删除主表test1发现删除失败。

1. mysql> drop table test1;
2. ERROR 1217 (23000): Cannot delete or update a parent row: a foreign key constraint fails

此时需要先解除子表test2的约束,然后删除主表test1就可以删除了。

1. mysql> alter table test2 drop foreign key test_key;
2. Query OK, 0 rows affected (0.00 sec)
3. Records: 0  Duplicates: 0  Warnings: 0
4. 
5. mysql> drop table test1;
6. Query OK, 0 rows affected (0.00 sec)

总结


#创建表

create table 表名(字段名1 字段类型1 [约束条件1],字段名2 字段类型2 [约束条件2]);

约束条件

主键约束

PRIMARY KEY

外键约束

CONSTRAINT [外键名] FOREIGN KEY [字段名] REFERENCES [主表名] 主键列1

非空约束

NOT NULL

唯一约束

[CONSTRATIN <约束名>] UNIQUE (<字段名>)

默认约束

DEFAULT 默认值

自动增加值

AUTO_INCREMENT

#表结构

查看表结构

基本结构

DESCRIBE 表名;

基本结构

DESC 表名;

详细结构

SHOW CREATE TABLE 表名;

#修改表

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

修改数据表

修改表名

RENAME [TO]

修改字段数据类型

MODIFY

修改字段名

CHANGE

添加字段

ADD [FIRST|AFTER 已存在字段名]

删除字段

DROP

修改排列位置

MODIFY

修改存储引擎

ENGINE

删除表外键约束

DROP FOREIGN KEY

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
7月前
|
关系型数据库 MySQL 数据库
数据迁移脚本优化过程:从 MySQL 到 Django 模型表
在大规模的数据迁移过程中,性能问题往往是开发者面临的主要挑战之一。本文将分析一个数据迁移脚本的优化过程,展示如何从 MySQL 数据库迁移数据到 Django 模型表,并探讨优化前后的性能差异。
|
6月前
|
存储 SQL 关系型数据库
MySQL设计规约问题之在数据库设计中,为什么要适当考虑反范式的表设计
MySQL设计规约问题之在数据库设计中,为什么要适当考虑反范式的表设计
|
6月前
|
SQL 存储 数据库
MySQL设计规约问题之如何处理日志类型的表
MySQL设计规约问题之如何处理日志类型的表
|
7月前
|
存储 关系型数据库 MySQL
MySQL的一些基本操作
MySQL的一些基本操作
34 1
|
7月前
|
关系型数据库 MySQL
蓝易云 - 如何修复MySQL中损坏的表
最后,为了防止数据丢失,定期备份数据是非常重要的。
158 3
|
6月前
|
运维 关系型数据库 MySQL
实时计算 Flink版产品使用问题之在处理MySQL表新增数据记录时,没有正确触发变更事件,该如何解决
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
7月前
|
SQL 关系型数据库 MySQL
ClickHouse(23)ClickHouse集成Mysql表引擎详细解析
ClickHouse的MySQL引擎允许执行`SELECT`查询从远程MySQL服务器。使用`MySQL(&#39;host:port&#39;, &#39;database&#39;, &#39;table&#39;, &#39;user&#39;, &#39;password&#39;[,...])`格式连接,支持简单`WHERE`子句在MySQL端处理,复杂条件和`LIMIT`在ClickHouse端执行。不支持`NULL`值,用默认值替换。系列文章涵盖ClickHouse安装、集群搭建、表引擎解析等主题。[链接](https://zhangfeidezhu.com/?p=468)有更多
289 0
|
7月前
|
关系型数据库 MySQL 数据库
深入OceanBase分布式数据库:MySQL 模式下的 SQL 基本操作
深入OceanBase分布式数据库:MySQL 模式下的 SQL 基本操作
|
7月前
|
SQL 缓存 关系型数据库
MySQL操作全攻略:库、表、数据、事务全面指南
MySQL操作全攻略:库、表、数据、事务全面指南
|
7月前
|
SQL 关系型数据库 MySQL
经验大分享:MySQL(三)数据库表的查询操作【重要】
经验大分享:MySQL(三)数据库表的查询操作【重要】
82 0