[MySQL]表的创建、修改与删除(二)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: [MySQL]表的创建、修改与删除(二)

3.2 修改字段

对表的字段进行修改,可以修改字段的数据类型、长度、默认值、位置等。

一般修改字段不会修改字段的数据类型,修改字段的数据类型很可能影响原本的数据。

语法:

ALTER TABLE 表名 
MODIFY [COLUMN] 字段名1 字段类型 [DEFAULT 默认值] [FIRST|AFTER 字段名 2];

3.2.1 修改字段的长度

ALTER TABLE myemp1
# 将emp_name字段的长度修改为25
MODIFY emp_name VARCHAR(25);
DESC myemp1;

3.2.2 修改字段的同时设置默认值

ALTER TABLE myemp1
# 将emp_name字段的长度修改为35
# 同时指定默认名字为张三
MODIFY emp_name VARCHAR(35) DEFAULT '张三';
DESC myemp1;

3.2.3 修改字段的位置

ALTER TABLE myemp1
# 将emp_name字段的长度修改为25
# 同时字段位于phone_num之后
# 不能单独设置字段的位置,即不能只写AFTER phone_num
MODIFY emp_name VARCHAR(25) AFTER phone_num;
DESC myemp1;

3.3 重命名字段

语法:

ALTER TABLE 表名 CHANGE [column] 列名 新列名 新数据类型;
ALTER TABLE myemp1
CHANGE salary monthly_salary double(10,2);
DESC myemp1;

3.4 删除字段

语法:

ALTER TABLE 表名 DROP [COLUMN] 字段名
ALTER TABLE myemp1
DROP phone_num;
DESC myemp1;

4. 重命名表

4.1 方式一:RENAME

语法:

RENAME TABLE 旧表名 TO 新表名;
RENAME TABLE myemp1 TO emp1;
SHOW TABLES;

4.2 方式二:ALTER

语法:

ALTER table 要修改的表 RENAME [TO] 新表名
ALTER TABLE emp1
RENAME myemp1;
SHOW TABLES;

5. 删除表

语法:

DROP TABLE [IF EXISTS] 数据表1 [, 数据表2, …, 数据表n];
USE atguigudb;
DROP TABLE IF EXISTS employees_blank;
SHOW TABLES;

数据表删除之后,不能撤销删除操作。

不光将表结构删除掉,同时表中的数据也删除掉,释放表空间。即数据和结构都被删除。

6. 清空表

清空表,表示清空表中的所有数据,但是表结构保留。

语法:

TRUNCATE TABLE 表名;
TRUNCATE TABLE employees_copy;
SELECT * FROM employees_copy;

6.1 TRUNCATE TABLE与DELETE FROM的对比

  • 相同点:
  • 都可以实现对表中所有数据的删除,同时保留表结构。
  • 不同点:
  • TRUNCATE TABLE:一旦执行此操作,表数据全部清除。同时,数据是不可以回滚的。
  • DELETE FROM:一旦执行此操作,表数据可以全部清除(不带WHERE)。同时,数据是可以实现回滚的(COMMIT之前)。

7. DCL中的COMMIT与ROLLBACK

  • COMMIT:
  • 提交数据。
  • 一旦执行COMMIT,则数据就被永久的保存在了数据库中,意味着数据不可以回滚。
  • ROLLBACK:
  • 回滚数据。
  • 一旦执行ROLLBACK,则可以实现数据的回滚。回滚到最近的一次COMMIT之后。

阿里开发规范:

【参考】TRUNCATE TABLE 比 DELETE 速度快,且使用的系统和事务日志资源少,但 TRUNCATE 无事务且不触发 TRIGGER,有可能造成事故,故不建议在开发代码中使用此语句

说明:TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同。

8. DDL 与 DML 说明

  • DDL
  • DDL的操作一旦执行,就不可回滚。
  • 指令SET autocommit = FALSE对DDL操作失效。(因为在执行完DDL操作之后,一定会执行一次COMMIT。而此COMMIT操作不受SET autocommit = FALSE影响的。)
  • DML
  • DML的操作默认情况,一旦执行,也是不可回滚的。DML执行完成默认会执行一次COMMIT。
  • 如果在执行DML之前,执行了SET autocommit = FALSE,则执行的DML操作就可以实现回滚。

8.1 演示

8.1.1 DML

# 为了避免之前的操作造成影响,先提交一次
COMMIT;
# 查询myemp3中的数据
SELECT * FROM myemp3;

# 取消DML操作的自动提交
SET AUTOCOMMIT = FALSE;
# 使用DELETE FROM清空myemp3中的数据
DELETE FROM myemp3;
# 再次查询myemp3
SELECT * FROM myemp3;

# 进行数据的回滚
ROLLBACK;
# 再次查询myemp3
# 由于没有提交清空操作所以可以进行数据的回滚
SELECT * FROM myemp3;

在执行DML之前,执行了SET autocommit = FALSE,则执行的DML操作就可以实现回滚。

8.1.2 DDL

# 为了避免之前的操作造成影响,先提交一次
COMMIT;
# 查询myemp3中的数据
SELECT * FROM myemp3;

# 取消DML操作的自动提交
SET AUTOCOMMIT = FALSE;
# 使用TRUNCATE TABLE清空myemp3中的数据
TRUNCATE TABLE myemp3;
# 再次查询myemp3
SELECT * FROM myemp3;

# 进行数据的回滚
ROLLBACK;
# 再次查询myemp3
# 由于执行的为DDL操作,所以不能进行数据的回滚
SELECT * FROM myemp3

DDL的操作一旦执行,就不可回滚。且指令SET autocommit = FALSE对DDL操作无效。

9. 阿里MySQL命名规范

  • 【 强制 】表名、字段名必须使用小写字母或数字,禁止出现数字开头,禁止两个下划线中间只出现数字。数据库字段名的修改代价很大,因为无法进行预发布,所以字段名称需要慎重考虑。
  • 正例:aliyun_admin,rdc_config,level3_name
  • 反例:AliyunAdmin,rdcConfig,level_3_name
  • 【 强制 】禁用保留字,如 desc、range、match、delayed 等,请参考 MySQL 官方保留字。
  • 【 强制 】表必备三字段:id, gmt_create, gmt_modified。
  • 说明:其中 id 必为主键,类型为BIGINT UNSIGNED、单表时自增、步长为 1。gmt_create, gmt_modified 的类型均为 DATETIME 类型,前者现在时表示主动式创建(最开始[第一次]添加数据的时间),后者过去分词表示被动式更新(后期对数据进行修改的时间)
  • 【 推荐 】表的命名最好是遵循 “业务名称_表的作用”。
  • 正例:alipay_task 、 force_project、 trade_config
  • 【 推荐 】库名与应用名称尽量一致。
  • 【参考】合适的字符存储长度,不但节约数据库表空间、节约索引存储,更重要的是提升检索速度。
  • 正例:无符号值可以避免误存负数,且扩大了表示范围。

10. MySQL8新特性—DDL的原子化

在MySQL 8.0版本中,InnoDB表的DDL支持事务完整性,即 DDL操作要么成功要么回滚 。

CREATE DATABASE mytest; 
USE mytest; 
CREATE TABLE book1( 
  book_id INT , 
  book_name VARCHAR(255) 
);
SHOW TABLES;

由于删除两种表为同一个事务,在MySQL 8.0版本中,InnoDB表的DDL支持事务完整性,所以删除第二个表失败时会进行事务的回滚,撤销对表1的删除。因为在删除表2失败时并没有整个事务执行成功,所以会回滚。


相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
9月前
|
安全 关系型数据库 MySQL
【MySQL】表的增删查改
【MySQL】表的增删查改
|
9月前
|
关系型数据库 MySQL 数据库
数据迁移脚本优化过程:从 MySQL 到 Django 模型表
在大规模的数据迁移过程中,性能问题往往是开发者面临的主要挑战之一。本文将分析一个数据迁移脚本的优化过程,展示如何从 MySQL 数据库迁移数据到 Django 模型表,并探讨优化前后的性能差异。
|
9月前
|
SQL 关系型数据库 MySQL
mysql sql语句删除一个库下的所有表
mysql sql语句删除一个库下的所有表
60 1
|
9月前
|
分布式计算 DataWorks MaxCompute
DataWorks产品使用合集之需要将mysql 表(有longtext类型字段) 迁移到odps,但odps好像没有对应的类型支持,该怎么办
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
9月前
|
关系型数据库 MySQL
蓝易云 - 如何修复MySQL中损坏的表
最后,为了防止数据丢失,定期备份数据是非常重要的。
172 3
|
8月前
|
存储 SQL 关系型数据库
MySQL设计规约问题之在数据库设计中,为什么要适当考虑反范式的表设计
MySQL设计规约问题之在数据库设计中,为什么要适当考虑反范式的表设计
|
8月前
|
SQL 存储 数据库
MySQL设计规约问题之如何处理日志类型的表
MySQL设计规约问题之如何处理日志类型的表
|
8月前
|
运维 关系型数据库 MySQL
实时计算 Flink版产品使用问题之在处理MySQL表新增数据记录时,没有正确触发变更事件,该如何解决
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
9月前
|
SQL 存储 关系型数据库
MySQL数据库——SQL(1)-SQL通用语法、SQL分类、DDL(数据库操作、表操作)
MySQL数据库——SQL(1)-SQL通用语法、SQL分类、DDL(数据库操作、表操作)
109 1
|
9月前
|
存储 关系型数据库 MySQL
【MySQL】表的约束
【MySQL】表的约束