Bohr-L Bohr-L
首页
技术
常见面试题
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

刘博

I'm a slow walker, But I never walk backwards.
首页
技术
常见面试题
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 数据处理与存储类

  • Spring 生态类

  • 缓存问题类

  • 多线程类

  • JVM 类

  • MySQL 类

    • MySQL 为什么一定要有一个主键
    • MySQL 中的 RR 隔离级别,到底有没有解决幻读问题
    • MySQL 的行级锁到底锁的是什么东西?
    • 存储 MD5 值应该用 VARCHAR 还是用 CHAR?
    • 数据库的三范式是什么?
    • 说说 InnoDB 与 MyISAM 的区别
    • drop、truncate、delete 的区别
    • 聊一聊数据库事务机制
    • 聊一聊 MySQL 中的关联查询
    • 事务隔离级别有哪些?MySQL 的默认隔离级别是什么
    • 分库分表之后,id 主键如何处理?
    • 说说在 MySQL 中一条查询 SQL 是如何执行的?
    • 讲解下 DDL、DML、DCL
      • 存储过程和触发器的作用
      • MySQL 如何行转列和列转行
      • 如何查看 SQL 的执行计划
      • union 和 unionAll 的区别
      • having 和 where 的区别
      • 常见的索引原则
      • MySQL 中的 IN 和 EXISTS 子句有什么区别?
      • MySQL 如何处理 NULL 值,对性能有什么影响?
      • 如何在 MySQL 中处理和避免全表扫描?
      • MySQL 中的表空间是什么,它的作用是什么?
      • 在 MySQL 中,如何优化 ORDER BY 查询?
    • Java 8 + 特性类

    • 其他技术类

    • 常见面试题
    • MySQL 类
    刘博
    2025-12-29
    目录

    讲解下 DDL、DML、DCL

    DDL、DML、DCL 是 MySQL 中三种核心 SQL 语句类型,分别对应 “数据定义”“数据操作”“数据控制”,职责明确,具体定义、语法及示例如下:

    # 1. DDL(Data Definition Language,数据定义语言)

    • 核心作用:定义数据库、表、索引等 “数据结构”,不涉及数据本身的增删改查;

    • 关键特性:执行后自动提交事务(无法 ROLLBACK),会修改数据结构的元信息;

    • 常用语句:

      • CREATE:创建数据库、表、索引等;
      CREATE DATABASE test_db; -- 创建数据库
      CREATE TABLE user (id INT PRIMARY KEY, name VARCHAR(20)); -- 创建表
      CREATE INDEX idx_name ON user(name); -- 创建索引
      
      1
      2
      3
    • ALTER:修改数据库、表的结构(如添加字段、修改字段类型、删除索引);

      ALTER TABLE user ADD COLUMN age INT; -- 新增字段
      ALTER TABLE user MODIFY COLUMN age TINYINT; -- 修改字段类型
      ALTER TABLE user DROP INDEX idx_name; -- 删除索引
      
      1
      2
      3
    • DROP:删除数据库、表、索引等;

      DROP DATABASE test_db; -- 删除数据库
      DROP TABLE user; -- 删除表
      DROP INDEX idx_name ON user; -- 删除索引
      
      1
      2
      3
    • TRUNCATE:清空表数据(保留表结构),属于 DDL(非 DML);

      TRUNCATE TABLE user; -- 清空user表数据
      
      1

    # 2. DML(Data Manipulation Language,数据操作语言)

    • 核心作用:操作表中的 “数据”(增删改查),不修改数据结构;

    • 关键特性:支持事务(InnoDB 中可 ROLLBACK),执行后需 COMMIT 才会持久化;

    • 常用语句:

      • INSERT:插入数据;
      INSERT INTO user (id, name) VALUES (1, '张三'), (2, '李四'); -- 批量插入
      
      1
    • UPDATE:修改数据;

      UPDATE user SET name='张三三' WHERE id=1; -- 修改id=1的用户名称
      
      1
    • DELETE:删除数据;

      DELETE FROM user WHERE id=2; -- 删除id=2的用户
      
      1
    • SELECT:查询数据(部分分类中 SELECT 单独列为 DQL,数据查询语言);

      SELECT * FROM user WHERE id=1; -- 查询id=1的用户
      
      1

    # 3. DCL(Data Control Language,数据控制语言)

    • 核心作用:控制数据库的 “访问权限” 和 “事务控制”;

    • 关键特性:执行后自动提交,影响用户对数据的操作权限;

    • 常用语句:

      • 权限控制:GRANT(授予权限)、REVOKE(撤销权限);
      GRANT SELECT, UPDATE ON test_db.user TO 'test_user'@'localhost' IDENTIFIED BY '123456'; -- 授予查询、修改权限
      REVOKE UPDATE ON test_db.user FROM 'test_user'@'localhost'; -- 撤销修改权限
      
      1
      2
    • 事务控制:COMMIT(提交事务)、ROLLBACK(回滚事务)、SET TRANSACTION(设置事务隔离级别);

      COMMIT; -- 提交事务
      ROLLBACK; -- 回滚事务
      SET TRANSACTION ISOLATION LEVEL REPEATABLE READ; -- 设置事务隔离级别
      
      1
      2
      3
    • 其他:FLUSH PRIVILEGES(刷新权限,修改用户权限后生效);

      FLUSH PRIVILEGES; -- 刷新权限
      
      1

    # 总结

    • DDL:管 “结构”(建库、建表、改表);
    • DML:管 “数据”(增删改查);
    • DCL:管 “权限” 和 “事务”(授权、提交、回滚)。

    上次更新: 12/30/2025
    说说在 MySQL 中一条查询 SQL 是如何执行的?
    存储过程和触发器的作用

    ← 说说在 MySQL 中一条查询 SQL 是如何执行的? 存储过程和触发器的作用→

    最近更新
    01
    CPU 使用率较高排查和解决
    12-29
    02
    JVM OOM 问题如何排查和解决
    12-29
    03
    接口防刷怎么实现?
    12-29
    更多文章>
    Theme by Vdoing | Copyright © 2025-2026 Bohr-L's note
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式