MySQL-表的基本操作(二)

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介: 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

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3天前
|
运维 DataWorks 关系型数据库
DataWorks产品使用合集之DataWorks还有就是对于mysql中的表已经存在数据了,第一次全量后面增量同步的步骤如何解决
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
19 2
|
2天前
|
SQL 存储 关系型数据库
【MySQL】DDL的表操作详解:创建&查询&修改&删除
【MySQL】DDL的表操作详解:创建&查询&修改&删除
|
3天前
|
存储 SQL 关系型数据库
mysql查询数据库表大小怎么操作
mysql查询数据库表大小怎么操作
|
4天前
|
存储 SQL 关系型数据库
MySQL表的增删改查---多表查询和联合查询
MySQL表的增删改查---多表查询和联合查询
|
5天前
|
关系型数据库 MySQL 数据库
【MySQL探索之旅】数据库的基本操作
【MySQL探索之旅】数据库的基本操作
|
5天前
|
关系型数据库 MySQL
Mysql单表查询的基本操作
Mysql单表查询的基本操作
|
7天前
|
存储 关系型数据库 MySQL
{MySQL} 数据库约束& 表的关系& 新增&&删除& 修改& 查询
{MySQL} 数据库约束& 表的关系& 新增&&删除& 修改& 查询
16 0
|
8天前
|
存储 关系型数据库 MySQL
|
16天前
|
关系型数据库 MySQL
MySQL 实例employee表综合查询
MySQL 实例employee表综合查询
|
16天前
|
存储 关系型数据库 MySQL
MySQL 表管理
MySQL 表管理