MYSQL中的 DDL、DML、DQL 和 DCL详解

前言

在 MySQL(以及其他关系型数据库)中,SQL 语句可以分为四大类:DDLDMLDQLDCL。每一类语句都用于不同的目的,分别与数据库结构、数据操作、数据查询和数据控制相关。

1. DDL(数据定义语言)

DDL 用于定义和管理数据库的结构,比如表、索引、视图、存储过程等的创建、修改和删除。

常见的 DDL 操作:

CREATE:创建数据库对象,如表、索引、视图等。

ALTER:修改数据库对象,如修改表结构(增加、删除字段)。

DROP:删除数据库对象,如删除表或数据库。

TRUNCATE:删除表中所有数据,但不删除表结构。

例子:

创建表

sql 复制代码
CREATE TABLE students (
  student_id INT PRIMARY KEY,
  name VARCHAR(100),
  age INT,
  grade VARCHAR(10)
);

这条语句创建了一个名为 students 的表,包含 student_idnameagegrade 四个字段。

2.修改表结构(添加列)

sql 复制代码
ALTER TABLE students ADD COLUMN address VARCHAR(255);

这条语句在 students 表中添加了一个 address 列。

3.删除表

sql 复制代码
DROP TABLE students;

这条语句删除了整个 students 表,包含所有数据和表结构。

2. DML(数据操作语言)

DML 用于对数据库中的数据进行操作,主要包括插入、更新、删除和查询等。

常见的 DML 操作:

INSERT:插入数据。

UPDATE:更新数据。

DELETE:删除数据。

例子:

插入数据

sql 复制代码
INSERT INTO students (student_id, name, age, grade)
VALUES (1, 'John Doe', 20, 'A');

这条语句向 students 表中插入了一条记录,指定了 student_idnameagegrade 的值。

2.更新数据

sql 复制代码
UPDATE students SET age = 21 WHERE student_id = 1;

这条语句将 student_id1 的学生的 age 更新为 21

3.删除数据

sql 复制代码
DELETE FROM students WHERE student_id = 1;

这条语句删除了 student_id1 的学生记录。

3. DQL(数据查询语言)

DQL 主要用于从数据库中查询数据,它是 SQL 中最常用的操作。

常见的 DQL 操作:

SELECT:用于查询数据。

例子:

查询所有数据

sql 复制代码
SELECT * FROM students;

这条语句查询 students 表中的所有列和所有记录。

查询指定列的数据

sql 复制代码
SELECT name, grade FROM students WHERE age > 18;

这条语句查询 students 表中 age 大于 18 的学生的 namegrade

查询数据并进行排序

sql 复制代码
SELECT * FROM students ORDER BY age DESC;

这条语句查询所有学生,并按照 age 降序排列。

4. DCL(数据控制语言)

DCL 用于控制对数据库中数据的访问权限,包括授予和撤销用户的权限。

常见的 DCL 操作:

GRANT:授予权限。

REVOKE:撤销权限。

例子:

授予权限

sql 复制代码
GRANT SELECT, INSERT ON students TO 'user1'@'localhost';

这条语句授予用户 user1localhost 上对 students 表的 SELECTINSERT 权限。

撤销权限

sql 复制代码
REVOKE SELECT ON students FROM 'user1'@'localhost';

这条语句撤销了用户 user1localhost 上对 students 表的 SELECT 权限。

总结

DDL(数据定义语言):定义和管理数据库结构,如创建、修改、删除表结构。

DML(数据操作语言):对数据库中的数据进行操作,如插入、更新和删除数据。

DQL(数据查询语言) :查询数据库中的数据,通常使用 SELECT

DCL(数据控制语言):控制用户访问权限,如授予或撤销权限。

这四种语言各自有不同的作用,但通常会一起使用,以实现完整的数据库管理。

相关推荐
冬天vs不冷8 分钟前
EasyExcel导出自动回显中文,读取自动转换码值(基于全局转换器与自定义注解)
java·excel
阿里云云原生11 分钟前
RAG 调优指南:Spring AI Alibaba 模块化 RAG 原理与使用
java·人工智能·spring
光军oi13 分钟前
Mysql从入门到精通day5————子查询精讲
android·数据库·mysql
天上掉下来个程小白15 分钟前
Redis-12.在Java中操作Redis-Spring Data Redis使用方式-操作字符串类型的数据
java·redis·spring·springboot·苍穹外卖
ん贤1 小时前
2023第十四届蓝桥杯大赛软件赛省赛C/C++ 大学 B 组(真题&题解)(C++/Java题解)
java·c语言·数据结构·c++·算法·蓝桥杯
qr9j422332 小时前
Django自带的Admin后台中如何获取当前登录用户
数据库·django·sqlite
cherry52302 小时前
【PostgreSQL】【第4章】PostgreSQL的事务
数据库·postgresql
在京奋斗者3 小时前
spring boot自动装配原理
java·spring boot·spring
IT成长日记6 小时前
【MySQL基础】聚合函数从基础使用到高级分组过滤
数据库·mysql·聚合函数
明天不下雨(牛客同名)6 小时前
为什么 ThreadLocalMap 的 key 是弱引用 value是强引用
java·jvm·算法