当前位置: 首页 > news >正文

【零基础学MySQL】第二章:SQL类型

SQL,全称为

Structure Query Language(结构化查询语言)

,是一套用于管理关系型数据库的标准编程语言。如果把数据库比作一座大型图书馆,SQL 就像是图书馆管理员的 “工作手册”—— 通过它,我们能精准地完成图书(数据)的入库、整理、查找和权限管理等操作。

从本质上来说,SQL 是操作数据库的 “通用普通话”,无论你使用 MySQL、Oracle、SQL Server 还是 PostgreSQL,核心的 SQL 逻辑都是相通的。但需要注意的是,不同数据库厂商会在标准 SQL 的基础上增加 “方言”,以适配自身特性。例如:

  • MySQL 的分页方言:使用LIMIT关键字,比如SELECT * FROM table LIMIT 10 OFFSET 20(查询第 21-30 条数据);

  • Oracle 的分页方言:依赖伪列ROWNUM,例如SELECT * FROM (SELECT t.*, ROWNUM rn FROM table t WHERE ROWNUM <= 30) WHERE rn >= 21

掌握 SQL 的关键,在于区分它的五大核心类型 ——DDL、DML、DQL、DCL、TCL。它们各司其职,共同构成了数据库操作的完整流程。

3.1 DDL:数据定义语言,“搭建数据库的骨架”

DDL(Data Definition Language)是用于定义和管理数据库对象结构的语言,相当于为数据库 “搭建骨架”—— 比如创建数据库、数据表,修改表结构,或删除无用的对象。它的操作会直接改变数据库的物理结构,且执行后通常无法撤销(需谨慎操作)。

核心作用

  • 创建数据库、数据表、视图、索引等对象;

  • 修改已存在对象的结构(如给表加字段、改字段类型);

  • 删除不需要的对象(如删表、删索引)。

常用命令及示例

  1. CREATE:创建对象,最基础的 DDL 命令。
  • 创建数据库:CREATE DATABASE test_db;(创建名为 test_db 的数据库);

  • 创建数据表:CREATE TABLE user (id INT PRIMARY KEY, name VARCHAR(50), age INT);(创建 user 表,包含 id、name、age 三个字段,id 为主键)。

  1. ALTER:修改对象结构,常用于调整表结构。
  • 给表加字段:ALTER TABLE user ADD email VARCHAR(100);(给 user 表新增 email 字段);

  • 修改字段类型:ALTER TABLE user MODIFY age TINYINT;(将 age 字段从 INT 改为 TINYINT);

  • 改表名:ALTER TABLE user RENAME TO user_info;(将 user 表重命名为 user_info)。

  1. DROP:删除对象,操作不可逆,需格外小心。
  • 删除数据表:DROP TABLE user_info;(删除 user_info 表,表中所有数据也会被删除);

  • 删除数据库:DROP DATABASE test_db;(删除 test_db 数据库,库中所有表和数据都会被清空)。

3.2 DML:数据操作语言,“给数据库填充血肉”

DML(Data Manipulation Language)是用于操作数据表中数据的语言,相当于为 “骨架” 填充 “血肉”—— 比如添加新数据、修改已有数据、删除无用数据。它的操作针对的是表中的具体记录,且默认情况下可以通过事务回滚撤销(需配合 TCL 使用)。

核心作用

  • 向数据表中插入新数据(增);

  • 修改表中已存在的数据(改);

  • 删除表中不需要的数据(删)。

常用命令及示例

  1. INSERT:插入数据,向表中添加新记录。
  • 插入单条数据:INSERT INTO user (id, name, age) VALUES (1, '张三', 25);(给 user 表插入一条 id 为 1、姓名为张三、年龄 25 的记录);

  • 插入多条数据:INSERT INTO user (id, name, age) VALUES (2, '李四', 30), (3, '王五', 28);(一次性插入两条记录)。

  1. UPDATE:修改数据,更新表中已有记录的内容。
  • 修改单条记录:UPDATE user SET age = 26 WHERE id = 1;(将 id 为 1 的用户年龄改为 26,必须加 WHERE 条件,否则会修改表中所有记录);

  • 修改多条记录:UPDATE user SET age = age + 1 WHERE age < 30;(将所有年龄小于 30 的用户,年龄加 1)。

  1. DELETE:删除数据,删除表中的记录(注意:DELETE 删的是记录,不是表结构,表还在)。
  • 删除单条记录:DELETE FROM user WHERE id = 3;(删除 id 为 3 的用户记录);

  • 删除符合条件的多条记录:DELETE FROM user WHERE age > 50;(删除所有年龄大于 50 的用户记录);

  • 清空表中所有记录(慎用):DELETE FROM user;(删除 user 表中所有记录,但表结构保留,可通过事务回滚恢复)。

3.3 DQL:数据查询语言,“从数据库中挖掘价值”

DQL(Data Query Language)是用于从数据库中查询数据的语言,也是日常开发中使用频率最高的 SQL 类型。它不修改数据,只负责 “读取” 数据 —— 无论是简单的单表查询,还是复杂的多表联查、统计分析,都依赖 DQL 实现。

核心作用

  • 从一个或多个表中查询指定字段的数据;

  • 对查询结果进行过滤、排序、分组、统计等处理;

  • 按需返回符合业务需求的数据(如分页查询、模糊查询)。

核心命令:SELECT

SELECT是 DQL 的唯一核心命令,但它可以结合多种关键字实现复杂查询,常见用法如下:

  1. 基础查询:查询指定字段或所有字段。
  • 查询所有字段:SELECT * FROM user;*表示所有字段,不推荐在生产环境使用,效率低);

  • 查询指定字段:SELECT id, name FROM user;(只查询 user 表的 id 和 name 字段)。

  1. 条件查询:结合WHERE过滤数据。
  • 等值查询:SELECT * FROM user WHERE age = 25;(查询年龄等于 25 的用户);

  • 范围查询:SELECT * FROM user WHERE age BETWEEN 20 AND 30;(查询年龄在 20-30 之间的用户);

  • 模糊查询:SELECT * FROM user WHERE name LIKE '张%';(查询姓 “张” 的用户,%表示任意字符)。

  1. 排序与分页:结合ORDER BY和分页方言。
  • 按年龄排序:SELECT * FROM user ORDER BY age DESC;(按年龄降序排列,DESC 表示降序,ASC 表示升序,默认 ASC);

  • MySQL 分页查询:SELECT * FROM user ORDER BY age DESC LIMIT 10 OFFSET 0;(查询前 10 条数据,OFFSET 0 表示从第 0 条开始)。

  1. 统计查询:结合COUNTSUM等聚合函数。
  • 统计用户总数:SELECT COUNT(*) AS user_count FROM user;COUNT(*)统计所有记录数,AS给结果列起别名);

  • 统计平均年龄:SELECT AVG(age) AS avg_age FROM user;AVG(age)计算年龄的平均值)。

3.4 DCL:数据控制语言,“给数据库加把安全锁”

DCL(Data Control Language)是用于管理数据库权限的语言,相当于为数据库 “加安全锁”—— 它决定了谁能访问数据库、能对数据库执行哪些操作(如是否允许某个用户修改表数据)。DCL 主要用于数据库管理员(DBA)进行权限管控,保障数据安全。

核心作用

  • 授予用户某个数据库或表的操作权限(如查询权、修改权);

  • 撤销用户已有的权限,防止越权操作;

  • 管理数据库用户(如创建用户、修改密码,但部分数据库将用户管理归为 DDL,如 MySQL)。

常用命令及示例

  1. GRANT:授予权限,给用户分配操作权限。
  • 授予查询权限:GRANT SELECT ON test_db.user TO 'test_user'@'``localhost``';(给localhost的 test_user 用户,授予 test_db 数据库下 user 表的查询权限);

  • 授予所有权限:GRANT ALL PRIVILEGES ON test_db.* TO 'test_user'@'``localhost``';(给 test_user 用户,授予 test_db 数据库下所有表的所有权限,*表示所有表);

  • 授予权限并允许传递:GRANT SELECT ON test_db.user TO 'test_user'@'``localhost``' WITH GRANT OPTION;(允许 test_user 将查询权限传递给其他用户)。

  1. REVOKE:撤销权限,收回用户已有的权限。
  • 撤销查询权限:REVOKE SELECT ON test_db.user FROM 'test_user'@'``localhost``';(收回 test_user 对 user 表的查询权限);

  • 撤销所有权限:REVOKE ALL PRIVILEGES ON test_db.* FROM 'test_user'@'``localhost``';(收回 test_user 对 test_db 数据库所有表的所有权限)。

3.5 TCL:事务控制语言,“保障数据操作的一致性”

TCL(Transaction Control Language)是用于管理数据库事务的语言,它能确保一组 DML 操作(如插入、修改)要么 “全部成功”,要么 “全部失败”,避免出现数据不一致的情况(比如转账时,扣款成功但收款失败)。

核心作用

  • 开启一个事务(标记操作的起始点);

  • 提交事务(确认所有操作,永久生效);

  • 回滚事务(撤销所有操作,恢复到事务开始前的状态);

  • 保存事务点(允许回滚到指定中间点,而非全部回滚)。

常用命令及示例

首先需要明确:不同数据库的事务默认行为不同。例如,MySQL 的 InnoDB 引擎默认 “自动提交事务”(即每执行一条 DML 就自动提交),需先通过SET AUTOCOMMIT = 0;关闭自动提交,再手动控制事务。

  1. 开启事务:标记事务的起始点,后续的 DML 操作都会纳入事务管理。
  • 显式开启:START TRANSACTION;BEGIN;(两种写法等价)。
  1. 提交事务:确认事务中的所有 DML 操作,将修改永久写入数据库,事务结束。
  • 示例:转账场景(用户 A 给用户 B 转 100 元)
SET AUTOCOMMIT = 0; -- 关闭自动提交START TRANSACTION; -- 开启事务UPDATE account SET balance = balance - 100 WHERE user\_id = 'A'; -- A扣款100UPDATE account SET balance = balance + 100 WHERE user\_id = 'B'; -- B收款100COMMIT; -- 确认操作,事务提交,数据永久生效
  1. 回滚事务:撤销事务中所有未提交的 DML 操作,恢复到事务开始前的状态。
  • 延续上面的转账场景,如果 B 收款失败(如 SQL 报错),则回滚:
SET AUTOCOMMIT = 0;START TRANSACTION;UPDATE account SET balance = balance - 100 WHERE user\_id = 'A'; -- A已扣款UPDATE account SET balance = balance + 100 WHERE user\_id = 'C'; -- 错误:用户C不存在,SQL报错ROLLBACK; -- 回滚事务,A的扣款会被撤销,数据恢复到事务前状态
  1. 保存事务点:结合SAVEPOINTROLLBACK TO,回滚到事务中的指定点,而非全部回滚。
START TRANSACTION;INSERT INTO user (id, name) VALUES (1, '张三'); -- 操作1SAVEPOINT sp1; -- 保存事务点sp1INSERT INTO user (id, name) VALUES (2, '李四'); -- 操作2ROLLBACK TO sp1; -- 回滚到sp1,操作2被撤销,操作1保留COMMIT; -- 最终只插入“张三”的记录

总结:SQL 五大类型的核心区别

为了帮大家快速区分,我们用一张表格总结五大 SQL 类型的核心差异:

类型核心作用关键命令是否修改数据 / 结构可逆性
DDL定义数据库结构CREATE、ALTER、DROP修改结构(表、库等)不可逆
DML操作表中数据INSERT、UPDATE、DELETE修改数据(记录)可通过事务回滚
DQL查询数据SELECT不修改,仅读取-
DCL管理权限GRANT、REVOKE不修改数据 / 结构,仅调整权限可逆(撤销权限)
TCL管理事务COMMIT、ROLLBACK不直接修改,控制 DML 的生效事务提交前可回滚

掌握这五大类型,就相当于掌握了 SQL 的 “语法骨架”。在实际开发中,我们通常会结合多种类型使用(如用 DDL 建表,用 DML 插数据,用 DQL 查数据,用 TCL 保障事务一致性),灵活应对不同的业务场景。

http://www.dtcms.com/a/545794.html

相关文章:

  • 程序员做网站给女朋友帝国后台网站如何设置自动刷新首
  • 仓颉语言变量声明与赋值深度解析
  • 宁波网站建设与推广方案安徽元鼎建设公司网站
  • Spring AI Alibaba 【三】
  • C++继承机制:面向对象编程的基石
  • 公司网站设计很好的怎么看一个网站是什么时候做的
  • pc不同网段间的通信过程
  • 成功移植游戏《四叶苜蓿》第二章——支持Linux和龙芯
  • 移动网站开发百科评价校园网站建设范例
  • 网站建设 别墅国家信用信息公示系统查询入口
  • 实验室安全教育与管理平台学习记录(二)化学类安全2
  • 武功县住房与城乡建设局网站太阳能建设网站
  • SAP-ABAP:SAP ABAP中的数学艺术:掌握向上取整与向下取整实例详解
  • OpenEuler中mysql这是在执行 MySQL 密码重置操作时出现的 “找不到mysqld_safe命令” 的错误场景。
  • GXDE 25.1 发布:系统优化若干
  • 【开题答辩全过程】以 病虫害监测管理系统的设计与实现为例,包含答辩的问题和答案
  • 深入浅出 MQTT:轻量级消息协议在物联网中的应用与实践
  • 天津网站开发自己怎么做商城网站视频教程
  • flash-attn安装卡在Building wheel for flash-attn (setup.py)
  • 【人工智能数学基础】什么是高斯分布/正态分布?
  • 医院网站建设策划怎么注册国外网站
  • 广州专业建网站公司微电影制作
  • 做网站买什么服务器上蔡专业网站建设
  • 计算机网络自顶向下方法15——应用层 P2P文件分发与BitTorrent协议
  • 深入理解 UDP:从协议基础到可靠实现与 QUIC 演进
  • wordpress 站点地址一个人建设小型网站
  • [人工智能-大模型-105]:模型层 - 为什么需要池化层,池化层的物理意义
  • 引流推广推广微信hyhyk1效果好亚马逊seo是什么
  • 统信桌面专业版安装应用显示架构不匹配怎么处理
  • Sqoop将MySQL数据导入HDFS