第3章 数据定义语言DDL

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

DDL:数据定义语言:create(增)、drop(删)、alter(改)、truncate。主要是对表结构进行操作。

3.1 MySQL的数据类型

类型 作用
varchar 可变长的字符串类型,根据实际长度东忒分配空间。优点:节省空间。缺点:需要动态分配空间,速度慢。最长255
char 定长字符串类型, 不管实际的数据长度是多少,分配固定长度的空间去存储数据。优缺点与上面相反。最长255
int 整型。等同于java的int。最长11
bigint 长整型。等同于java中的long。
float 单精度浮点型
double 双精度浮点型
date 短日期类型
datetime 长日期类型
clob Character Large OBject:CLOB。字符大对象, 最多存储4G的字符串。 超过255个字符的采用CLOB存储。 比如:存储一篇文章,一篇说明。
blob Binary Large OBject; 二进制大对象, 用来存储图片、声音、视频等流媒体数据。 BLOB类型字段上插入数据时,需要使用IO流。

varchar和char我们应该怎么选择?

性别字段选:性别是固定长度字符串,选择char。

姓名字段选:每个人名字长度不同,选择varchar。

例如:t_movie 电影表,存储电影信息

编号         名字     故事情节        上映日期         时长       海报        类型
no(bigint)  name(varchar) history(clob)   playtime(date)    time(double)  image(blob)     type(char)
------------------------------------------------------------------------------------------------------------------
10000      哪吒       ..........        2019-10-11       2.5         ....        '1'
10001      悟空传         ..........          2019-11-11       1.5        ....         '2'
....

3.2 表的创建:create

建表的语法格式create table 表名(字段名1 数据类型, 字段名2 数据类型, 字段名3 数据类型);

create table 表名(
  字段名1 数据类型, 
  字段名2 数据类型, 
  字段名3 数据类型
);

表名:建议以t_ 或者 tbl_开始,可读性强。见名知意。

字段名:见名知意。

表名和字段名都属于标识符。

3.3 表的删除:drop

drop table t_student;             //注意:当这张表不存在的时候会报错!
drop table if exists t_student;   //两句都可以,推荐这句

实例:创建一个学生表,学号、姓名、年龄、性别、邮箱地址

mysql> create table t_student(
    -> no int,
    -> name varchar(32),
    -> sex char(1),
    -> age int(3),
    -> email varchar(255)
    -> );
Query OK, 0 rows affected (0.01 sec)

3.4 快速创建表

了解内容, 将查询结果当做一张表新建,实现表集数据的快速复制

mysql> create table emp2 as select * from emp;  //两张表的数据一模一样
Query OK, 14 rows affected (0.01 sec)
Records: 14  Duplicates: 0  Warnings: 0
mysql> create table mytable as select empno,ename from emp where job='MANAGER';
Query OK, 3 rows affected (0.02 sec)
Records: 3  Duplicates: 0  Warnings: 0
mysql> select * from mytable;
+-------+-------+
| empno | ename |
+-------+-------+
|  7566 | JONES |
|  7698 | BLAKE |
|  7782 | CLARK |
+-------+-------+
3 rows in set (0.00 sec)

3.5 快速删除表中的数据:truncate

delete from dept_bak;      //这种删除数据的方式比较慢。

delete原理: 表中数据被删除了,但是数据在硬盘上的真实存储空间不会被释放!

缺点:删除效率比较低; 优点:支持回滚(即可恢复)

回滚实例

mysql> select * from dept_bak;
+--------+------------+----------+
| DEPTNO | DNAME      | LOC      |
+--------+------------+----------+
|     10 | ACCOUNTING | NEW YORK |
|     20 | RESEARCH   | DALLAS   |
|     30 | SALES      | CHICAGO  |
|     40 | OPERATIONS | BOSTON   |
+--------+------------+----------+
4 rows in set (0.00 sec)
mysql> start transaction;
Query OK, 0 rows affected (0.00 sec)
mysql> delete from dept_bak;
Query OK, 4 rows affected (0.00 sec)
mysql> rollback;
Query OK, 0 rows affected (0.01 sec)
mysql> select * from dept_bak;
+--------+------------+----------+
| DEPTNO | DNAME      | LOC      |
+--------+------------+----------+
|     10 | ACCOUNTING | NEW YORK |
|     20 | RESEARCH   | DALLAS   |
|     30 | SALES      | CHICAGO  |
|     40 | OPERATIONS | BOSTON   |
+--------+------------+----------+
4 rows in set (0.00 sec)

truncate原理:表被一次截断,物理删除。

缺点:不支持回滚。 优点:效率高,快速。

语法:truncate table dept_bak;

mysql> truncate table dept_bak;          //删数据,不是删表
Query OK, 0 rows affected (0.00 sec)
mysql> rollback;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from dept_bak;          //回滚也没用
Empty set (0.00 sec)

truncate删除速度很快,但是数据不可恢复。

注意:truncate是删除表中的数据,表还在。删除表用drop

3.6 修改表结构:alter

在MySQL中,ALTER语句用于修改数据库中的表结构。通过使用ALTER语句,您可以执行多种操作,包括添加、删除或修改表中的列,更改现有列的数据类型,添加或删除索引等。

添加列:

语法:ALTER TABLE table_name ADD column_name datatype;
示例:ALTER TABLE employees ADD email VARCHAR(255);

删除列:

语法:ALTER TABLE table_name DROP COLUMN column_name;
示例:ALTER TABLE employees DROP COLUMN age;

修改列:

语法:ALTER TABLE table_name MODIFY COLUMN column_name datatype;
示例:ALTER TABLE employees MODIFY COLUMN salary DECIMAL(10, 2);

重命名列:

语法:ALTER TABLE table_name CHANGE old_column_name new_column_name datatype;
示例:ALTER TABLE employees CHANGE name full_name VARCHAR(255);

添加主键:

语法:ALTER TABLE table_name ADD PRIMARY KEY (column_name);
示例:ALTER TABLE employees ADD PRIMARY KEY (id);

删除主键:

语法:ALTER TABLE table_name DROP PRIMARY KEY;
示例:ALTER TABLE employees DROP PRIMARY KEY;

添加唯一索引:

语法:ALTER TABLE table_name ADD UNIQUE (column_name);
示例:ALTER TABLE employees ADD UNIQUE (email);

删除唯一索引:

语法:ALTER TABLE table_name DROP INDEX column_name;
示例:ALTER TABLE employees DROP INDEX email;

添加索引:

语法:ALTER TABLE table_name ADD INDEX index_name (column_name);
示例:ALTER TABLE employees ADD INDEX idx_lastname (last_name);

删除索引:

语法:ALTER TABLE table_name DROP INDEX index_name;
示例:ALTER TABLE employees DROP INDEX idx_lastname;

请注意,使用ALTER语句时需要谨慎,特别是在修改大型表时,因为这可能会消耗大量的时间和资源。在对生产环境中的表进行修改之前,建议先备份数据并在测试环境中验证更改。

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
7月前
|
SQL Oracle 关系型数据库
DDL、DML和DCL的区别与理解
DDL、DML和DCL的区别与理解
239 1
DDL、DML和DCL的区别与理解
|
SQL 存储 开发框架
数据定义语言 - DDL
数据定义语言 - DDL
236 0
|
4月前
|
SQL 存储 安全
DDL、DML、DCL 的区别
【8月更文挑战第1天】
246 0
DDL、DML、DCL 的区别
|
7月前
|
SQL 存储 关系型数据库
关系性数据库定义语言(DDL)
DDL是SQL的子集,用于定义和修改数据库结构,如创建、删除或变更表、索引、视图等对象。主要命令有CREATE(创建)、ALTER(修改)和DROP(删除)。这些操作一旦执行即生效且无法回滚,需谨慎使用。DDL是SQL中数据定义的一部分,而SQL还包括DML(数据操作)和DCL(数据控制)。
119 3
|
SQL 存储 数据库
数据定义语言(DDL)详解
数据定义语言(DDL)是SQL(结构化查询语言)的一部分,它用于定义、管理和控制数据库的结构和元素。DDL允许数据库管理员、开发人员和其他用户创建、修改和删除数据库对象,如表、索引、视图等。在本文中,我们将深入探讨DDL的基本概念,包括表的创建、修改和删除,以及其他与DDL相关的重要主题。
1107 0
|
SQL 数据可视化 数据库
|
SQL 算法 数据库
DDL数据定义语言-操作表
DDL数据定义语言-操作表
|
SQL 存储 算法
DDL 数据定义语言-操作数据库
DDL 数据定义语言-操作数据库
|
SQL 关系型数据库 MySQL
DDL(数据定义语言)之操作数据库学习笔记
快速学习DDL(数据定义语言)之操作数据库
DDL(数据定义语言)之操作数据库学习笔记
|
SQL 数据库 索引
DQL、DML、DDL、DCL的概念与区别
DQL、DML、DDL、DCL的概念与区别