
数据库开发必备:深入理解DDL、DML、DQL和DCL
在学习数据库的过程中,理解数据库操作的基本分类及其功能至关重要。数据库操作通常被分为四大类:**DDL(数据定义语言)**、**DML(数据操纵语言)**、**DQL(数据查询语言)** 和 **DCL(数据控制语言)**。这些分类不仅帮助我们更好地理解数据库的操作机制,还能在实际应用中合理高效地管理数据库。本文将深入解析这四类语言的作用,并结合实际操作,详细介绍其中的内容。
文章目录
在学习数据库的过程中,理解数据库操作的基本分类及其功能至关重要。数据库操作通常被分为四大类: DDL(数据定义语言)、 DML(数据操纵语言)、 DQL(数据查询语言) 和 DCL(数据控制语言)。这些分类不仅帮助我们更好地理解数据库的操作机制,还能在实际应用中合理高效地管理数据库。本文将深入解析这四类语言的作用,并结合实际操作,详细介绍其中的内容。
一、数据库操作分类概述
1. DDL(数据定义语言)
DDL(Data Definition Language),数据定义语言,用来定义数据库结构,包括创建、修改和删除数据库对象,如数据库、表、索引和视图。常用的 DDL 操作包括:
- 创建数据库和表
- 修改数据库结构
- 删除数据库和表
- 设置表的约束和字段的类型
2. DML(数据操作语言)
DML(Data Manipulation Language),数据操作语言,主要用于对数据库中的数据进行增、删、改操作。常见的 DML 操作包括:
- 插入数据(INSERT)
- 更新数据(UPDATE)
- 删除数据(DELETE)
3. DQL(数据查询语言)
DQL(Data Query Language),数据查询语言,主要用于从数据库中查询数据,通常使用 SELECT
语句来获取所需的信息。DQL 是数据库操作中最常用的操作之一,能够帮助开发人员获取需要的数据。
4. DCL(数据控制语言)
DCL(Data Control Language),数据控制语言,用于控制数据库的访问权限,主要包括授权、撤销权限和管理数据库用户。通过 DCL,数据库管理员可以控制谁可以访问数据库以及执行哪些操作。
分类 | 全称 | 说明 |
---|---|---|
DDL | Data Definition Language | 数据定义语言,用来定义数据库对象(数据库、表、字段) |
DML | Data Manipulation Language | 数据操作语言,用来对数据库表中的数据进行增、删、改操作 |
DQL | Data Query Language | 数据查询语言,用来查询数据库中表的记录 |
DCL | Data Control Language | 数据控制语言,用来创建数据库用户,控制数据库的访问权限 |
二、DDL:数据定义语言
DDL的英文全称是Data Definition Language(数据定义语言),用来定义数据库对象(数据库、表、字段)
1.DDL - 数据库操作
-
查询所有数据库
SHOW DATABASES;
-
查询当前数据库
SELECT DATABASE();
-
创建数据库
CREATE DATABASE [IF NOT EXISTS] 数据库名字 [DEFAULT CHARSET 字符集] [COLLATE 排序规则];
-
删除数据库
DROP DATABASE [IF EXISTS] 数据库名;
-
选择当前使用的数据库
USE 数据库名;
2. DDL -表操作
2.1 查询
-
查询所有表:
SHOW TABLES;
-
查询表结构:
DESC 表名;
-
查询指定表的建表语句:
SHOW CREATE TABLE 表名;
2.2创建
-
创建表:
CREATE TABLE 表名 ( 字段1 类型 [COMMENT '字段注释'], 字段2 类型 [COMMENT '字段注释'], 字段3 类型 [COMMENT '字段注释'], ... 字段n 类型 [COMMENT '字段注释'] ) [COMMENT '表注释'];
注意:最后一个字段后面没有逗号 ,
2.3数据类型
数值类型
类型 | 大小 | 有符号范围 | 无符号范围 | 描述 |
---|---|---|---|---|
TINYINT | 1 byte | -128到127 | 0到255 | 小整数值 |
SMALLINT | 2 bytes | -32768到32767 | 0到65535 | 大整数值 |
MEDIUMINT | 3 bytes | -8388608到8388607 | 0到16777215 | 大整数值 |
INT / INTEGER | 4 bytes | -2147483648到2147483647 | 0到4294967295 | 大整数值 |
BIGINT | 8 bytes | -2^63到 2^63-1 | 0到2^64-1 | 极大整数值 |
FLOAT | 4 bytes | -2^128到 2^128 | 0到2^128 | 单精度浮点数 |
DOUBLE | 8 bytes | -2^1024到 2^1024 | 0到2^1024 | 双精度浮点数 |
DECIMAL | 根据精度和标度定义 | 精确定位的小数值 | 精确定位的小数值 | 小数值(精确定位) |
字符串类型
类型 | 大小 | 描述 |
---|---|---|
CHAR | 0-255 bytes | 定长字符串 |
VARCHAR | 0-65535 bytes | 变长字符串 |
TINYBLOB | 0-255 bytes | 二进制数据 |
TINYTEXT | 0-255 bytes | 短文本字符串 |
BLOB | 0-65535 bytes | 长文本数据 |
TEXT | 0-65535 bytes | 长文本数据 |
MEDIUMBLOB | 0-16777215 bytes | 中等长度的二进制数据 |
MEDIUMTEXT | 0-16777215 bytes | 中等长度文本数据 |
LONGBLOB | 0-4294967295 bytes | 极大二进制数据 |
LONGTEXT | 0-4294967295 bytes | 极大文本数据 |
日期类型
类型 | 大小 | 范围 | 格式 | 描述 |
---|---|---|---|---|
DATE | 3 bytes | 1000-01-01至9999-12-31 | YYYY-MM-DD | 日期值 |
TIME | 3 bytes | -838:59:59至838:59:59 | HH:MM:SS | 时间值或持续时间 |
YEAR | 1 byte | 1901至2155 | YYYY | 年份值 |
DATETIME | 8 bytes | 1000-01-01 00:00:00至9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS | 混合日期和时间值 |
TIMESTAMP | 4 bytes | 1970-01-01 00:00:01至2038-01-19 03:14:07 | YYYY-MM-DD HH:MM:SS | 混合日期和时间值,时间戳 |
2.4修改
-
添加字段:
ALTER TABLE 表名 ADD 字段名 数据类型 [COMMENT '注释'] [约束];
-
修改数据类型:
ALTER TABLE 表名 MODIFY 字段名 新数据类型;
-
修改字段名和字段类型:
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型 [COMMENT '注释'] [约束];
-
删除字段:
ALTER TABLE 表名 DROP 字段名;
-
修改表名:
ALTER TABLE 表名 RENAME TO 新表名;
-
删除表:
DROP TABLE [IF EXISTS] 表名;
-
删除表并重新创建:
TRUNCATE TABLE 表名;
三、DML:数据操作语言
DML的英文全称是Data Manipulation Language(数据操作语言),用来对数据库表中的数据进行增、删、改操作
1. DML - 添加数据
-
给指定字段添加数据:
INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (值1, 值2, ...);
-
给全部字段添加数据:
INSERT INTO 表名 VALUES (值1, 值2, ...);
-
批量添加数据:
INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (值1, 值2, ...), (值1, 值2, ...), (值1, 值2, ...);
INSERT INTO 表名 VALUES (值1, 值2, ...), (值1, 值2, ...), (值1, 值2, ...);
2. DML - 修改数据
-
更新数据:
UPDATE 表名 SET 字段名1 = 值1, 字段名2 = 值2, ... [WHERE 条件];
注:修改语句的条件可以有,也可以没有,若没有条件则修改整张表数据。
3. DML - 删除数据
-
删除数据:
DELETE FROM 表名 [WHERE 条件];
注:1.DELETE语句的条件可以有,也可以没有,若没有条件则删除整张表数据。
2.DELETE语句不能删除某一个字段的值(可以使用UPDATE)。
四、DQL:数据查询语言
DQL的英文全称是Data Query Language(数据查询语言),用来查询数据库中表的记录
1.DQL - 基本查询
1. 1查询多个字段
-
查询指定字段:
SELECT 字段1, 字段2, 字段3, ... FROM 表名;
-
查询所有字段:
SELECT * FROM 表名;
1. 2设置别名
-
给字段设置别名:
SELECT 字段1 [AS 别名1], 字段2 [AS 别名2], ... FROM 表名;
1.3去除重复记录
-
查询去重后的字段值:
SELECT DISTINCT 字段列表 FROM 表名;
2.DQL - 条件查询
2.1语法
SELECT 字段列表 FROM 表名 WHERE 条件列表;
2.2比较运算符
运算符 | 功能 |
---|---|
> | 大于 |
>= | 大于等于 |
< | 小于 |
<= | 小于等于 |
= | 等于 |
!= 或 <> | 不等于 |
BETWEEN ... AND ... | 在某个范围之内(包含最小、最大值) |
IN (...) | 在之后的列表中的值,多选 |
LIKE | 模糊匹配(_ 匹配单个字符,% 匹配任意字符) |
IS NULL | 是 NULL |
2.3逻辑运算符
运算符 | 功能 |
---|---|
AND 或 && | 并且(多个条件同时成立) |
OR 或 ` | |
NOT 或 ! | 非(不是) |
3.DQL - 聚合函数
3.1介绍
将一列数据作为一个整体,进行统计计算。
3.2. 常见聚合函数
函数 | 功能 |
---|---|
count | 统计数量 |
max | 最大值 |
min | 最小值 |
avg | 平均值 |
sum | 求和 |
3.3语法
SELECT 聚合函数(字段列表) FROM 表名;
4.DQL - 分组查询
4.1 语法
SELECT 字段列表 FROM 表名 [WHERE 条件] GROUP BY 分组字段 [HAVING 分组后过滤条件];
4.2 WHERE 与 HAVING 区别
- 执行时机不同:
WHERE
是在分组之前进行过滤,不能与聚合函数一起使用。
HAVING
是在分组之后对结果进行过滤,可以与聚合函数一起使用。- 判断条件不同:
WHERE
不能对聚合函数进行判断,而HAVING
可以。
好的,按照您提供的格式,下面是 DQL - 排序查询 的详细信息:
5. DQL - 排序查询
5.1 语法
SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1, 字段2 排序方式2;
5.2 排序方式
- ASC:升序(默认值)
- DESC:降序
注意:如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序。
根据您提供的图片内容,下面是 DQL - 分页查询 的详细信息:
6. DQL - 分页查询
6.1 语法
SELECT 字段列表 FROM 表名 LIMIT 起始索引, 查询记录数;
6.2 注意事项
1.起始索引 从 0 开始,起始索引 = (查询页码 - 1)* 每页显示记录数。
2.分页查询是数据库的通用功能,不同的数据库有不同的实现,MySQL 中使用
LIMIT
。3.如果查询的是第一页数据,起始索引可以省略,直接写
LIMIT 10
。
7. DQL - 执行顺序
在 SQL 查询中,虽然我们按照一定的语法顺序写出查询语句,但实际上数据库引擎执行这些查询的顺序是固定的。理解 SQL 查询的执行顺序有助于优化查询并避免逻辑错误。下面是 DQL 查询的执行顺序:
- FROM:首先从指定的表中选择数据。
- WHERE:接下来,数据库引擎会过滤符合条件的记录,确保查询只返回满足条件的行。
- GROUP BY:在过滤之后,数据会根据指定的字段进行分组。
- HAVING:对于分组后的数据,数据库会应用 HAVING 子句的条件,进一步筛选符合要求的分组。
- SELECT:数据库引擎最后会选择要返回的列。注意,尽管 SELECT 是 SQL 查询的第一个关键字,但它是在其他操作完成后才会执行。
- ORDER BY:接下来,数据会按指定的排序规则进行排序。
- LIMIT:最后,如果存在分页查询的需求,LIMIT 会限制返回的记录数量。
五、DCL:数据控制语言
DCL的英文全称是Data Control Language(数据控制语言),用来创建数据库用户,控制数据库的访问权限
1.DCL - 管理用户
1. 1查询用户
USE mysql;
SELECT * FROM user;
1. 2 创建用户
CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';
1. 3修改用户密码
ALTER USER '用户名'@'主机名' IDENTIFIED WITH mysql_native_password BY '新密码';
1.4.删除用户
DROP USER '用户名'@'主机名';
根据您提供的信息,继续仿照写 DCL - 权限控制 相关操作:
2. DCL - 权限控制
2.1 查询权限
SHOW GRANTS FOR '用户名'@'主机名';
2.2 授权权限
GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机名';
2.3 撤销权限
REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名';
注意:
- 多个权限之间,使用逗号分隔:在授予用户多个权限时,必须用逗号
,
来分隔每个权限。- 授权时,数据库名和表名可以使用
\*
进行通配,代表所有:可以使用星号*
来代替具体的数据库名和表名,表示对所有数据库或表进行授权。
2.4 常见权限
权限 | 说明 |
---|---|
ALL , ALL PRIVILEGES | 所有权限 |
SELECT | 查询数据 |
INSERT | 插入数据 |
UPDATE | 修改数据 |
DELETE | 删除数据 |
ALTER | 修改表结构 |
DROP | 删除数据库/表/视图 |
CREATE | 创建数据库/表 |
小结
通过本文的详细讲解,我们深入了解了数据库操作语言的四个主要分类:DDL、DML、DQL 和 DCL。每一类操作都有其独特的作用和功能,掌握它们是我们进行数据库设计、管理和开发的基础。在实际应用中,我们常常会结合这些操作进行综合应用,以满足不同的业务需求。
通过本篇博客的学习,希望能帮助你更好地理解和使用数据库操作语言,从而提高数据库管理和开发的效率。
更多推荐
所有评论(0)