news 2026/2/7 0:41:57

零基础学 SQL:DQL/DML/DDL/DCL 核心知识点汇总(附带连接云服务器数据库教程)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
零基础学 SQL:DQL/DML/DDL/DCL 核心知识点汇总(附带连接云服务器数据库教程)

SQL(结构化查询语言)是操作关系型数据库的标准语言,核心可以分为几大类:数据查询 (DQL)数据操作 (DML)数据定义 (DDL)数据控制 (DCL),其中日常开发中最常用的是前两类。

一、基础查询语句(DQL - SELECT)

这是最核心、使用频率最高的语句,用于从数据库中查询数据。

1. 基础语法
-- 查询指定列SELECT列名1,列名2FROM表名;-- 查询所有列(不推荐在生产环境使用*,效率低)SELECT*FROM表名;-- 去重查询SELECTDISTINCT列名FROM表名;-- 带条件查询(WHERE)SELECT列名FROM表名WHERE条件;-- 排序(ORDER BY,ASC升序/ DESC降序,默认升序)SELECT列名FROM表名ORDERBY列名DESC;-- 限制结果行数(MySQL用LIMIT,Oracle用ROWNUM)SELECT列名FROM表名LIMIT10;-- 只查前10条
2. 示例(以学生表student为例)
-- 查所有学生的姓名和年龄SELECTname,ageFROMstudent;-- 查年龄大于18的学生,按年龄降序排列,只取前5条SELECTname,ageFROMstudentWHEREage>18ORDERBYageDESCLIMIT5;-- 查所有不同的班级(去重)SELECTDISTINCTclassFROMstudent;

二、数据操作语句(DML)

用于新增、修改、删除表中的数据。

1. 插入数据(INSERT)
-- 插入指定列(列名和值要一一对应)INSERTINTO表名(列名1,列名2)VALUES(1,2);-- 插入所有列(需按表的列顺序填写值)INSERTINTO表名VALUES(1,2,3);-- 批量插入(推荐,比单条插入效率高)INSERTINTO表名(列名1,列名2)VALUES(1,2),(3,4),(5,6);

示例:

-- 给学生表插入一条数据INSERTINTOstudent(name,age,class)VALUES('张三',20,'计算机1班');-- 批量插入3条INSERTINTOstudent(name,age,class)VALUES('李四',19,'数学2班'),('王五',21,'英语1班');
2. 更新数据(UPDATE)
-- 带条件更新(必须加WHERE,否则会更新全表!)UPDATE表名SET列名1=1,列名2=2WHERE条件;

示例:

-- 将张三的年龄改为22UPDATEstudentSETage=22WHEREname='张三';
3. 删除数据(DELETE)
-- 带条件删除(必须加WHERE,否则会删除全表!)DELETEFROM表名WHERE条件;-- 清空表(保留表结构,数据全部删除,不可恢复)TRUNCATETABLE表名;-- 比DELETE效率高

示例:

-- 删除姓名为李四的学生DELETEFROMstudentWHEREname='李四';

三、数据定义语句(DDL)

用于创建、修改、删除数据库 / 表结构(日常开发中一般由 DBA 或架构师操作,新手谨慎使用)。

1. 创建表(CREATE TABLE)
CREATETABLE表名(列名1数据类型 约束,列名2数据类型 约束,...);

示例:

-- 创建学生表CREATETABLEstudent(idINTPRIMARYKEYAUTO_INCREMENT,-- 主键,自增nameVARCHAR(50)NOTNULL,-- 姓名,非空ageINT,-- 年龄classVARCHAR(50)-- 班级);
2. 修改表结构(ALTER TABLE)
-- 添加列ALTERTABLE表名ADD列名 数据类型;-- 修改列类型ALTERTABLE表名MODIFY列名 新数据类型;-- 删除列ALTERTABLE表名DROPCOLUMN列名;
3. 删除表(DROP TABLE)
-- 删除表(表结构和数据全部删除,不可恢复)DROPTABLE表名;

四、数据控制语言(DCL)

1、DCL 的核心应用场景

DCL 主要用于两类操作:

权限管理:授予(GRANT)或撤销(REVOKE)用户对数据库 / 表的操作权限(如查询、修改、删除)。

事务控制:管理事务的提交(COMMIT)、回滚(ROLLBACK)、保存点(SAVEPOINT),确保数据操作的原子性。

2、权限管理:GRANT & REVOKE

这是 DCL 最常用的部分,通常由数据库管理员(DBA)操作,普通开发人员很少直接使用,但了解其逻辑有助于理解数据库权限体系。

授予权限(GRANT)

核心语法

-- 给用户授予指定权限(针对表/数据库)GRANT权限类型ON数据库名.表名TO'用户名'@'访问地址'[IDENTIFIEDBY'密码'];-- 授予多个权限GRANT权限1,权限2ON数据库名.表名TO'用户名'@'访问地址';-- 授予所有权限(谨慎使用)GRANTALLPRIVILEGESON数据库名.*TO'用户名'@'访问地址';

常用权限类型

权限类型作用
SELECT允许查询表数据(DQL)
INSERT允许插入数据(DML)
UPDATE允许修改数据(DML)
DELETE允许删除数据(DML)
CREATE允许创建表 / 数据库(DDL)
DROP允许删除表 / 数据库(DDL)
ALTER允许修改表结构(DDL)
ALL PRIVILEGES所有权限

示例

-- 场景1:给用户test授予studentdb数据库中student表的查询和插入权限GRANTSELECT,INSERTONstudentdb.studentTO'test'@'localhost'IDENTIFIEDBY'123456';-- 场景2:给用户admin授予studentdb数据库所有表的所有权限(仅本机访问)GRANTALLPRIVILEGESONstudentdb.*TO'admin'@'localhost';-- 场景3:允许用户test从任意地址访问(%代表所有地址,生产环境谨慎)GRANTSELECTONstudentdb.studentTO'test'@'%';
撤销权限(REVOKE)

核心语法

REVOKE权限类型ON数据库名.表名FROM'用户名'@'访问地址';

示例

-- 撤销test用户对student表的插入权限REVOKEINSERTONstudentdb.studentFROM'test'@'localhost';-- 撤销admin用户的所有权限REVOKEALLPRIVILEGESONstudentdb.*FROM'admin'@'localhost';
注意点:

权限生效:部分数据库(如 MySQL)授予权限后需执行FLUSH PRIVILEGES;让权限立即生效;

访问地址:localhost仅允许本机访问,%允许任意地址(生产环境需限制为具体 IP);

最小权限原则:实际开发中应只授予用户 “够用” 的权限,避免过度授权(如普通查询用户只给 SELECT 权限)。

3、事务控制:COMMIT & ROLLBACK & SAVEPOINT

事务控制是 DCL 的另一核心,用于保证一组数据库操作要么全部成功,要么全部失败(原子性),常见于转账、订单创建等场景。

事务的基本概念

事务有 4 个特性(ACID):

原子性(Atomicity):操作要么全做,要么全不做;

一致性(Consistency):事务执行前后数据状态一致;

隔离性(Isolation):多个事务互不干扰;

持久性(Durability):事务提交后数据永久保存。

核心事务控制语句

(1)开启事务

不同数据库开启事务的语法略有差异:

-- MySQLSTARTTRANSACTION;-- 或 BEGIN;-- OracleSETTRANSACTION;-- 或直接执行DML语句自动开启

(2)提交事务(COMMIT)

确认所有操作生效,数据永久保存:

COMMIT;

(3)回滚事务(ROLLBACK)

撤销当前事务的所有操作,恢复到事务开始前的状态:

ROLLBACK;-- 回滚到指定保存点(SAVEPOINT)ROLLBACKTO保存点名;

(4)创建保存点(SAVEPOINT)

在事务中创建 “断点”,可回滚到该断点(而非整个事务):

SAVEPOINT保存点名;
示例:转账场景(经典事务控制)

假设有账户表account,数据如下:

idnamebalance
1张三1000
2李四1000

需求:张三给李四转 200 元,保证扣钱和加钱要么都成功,要么都失败。

-- 1. 开启事务STARTTRANSACTION;-- 2. 执行操作UPDATEaccountSETbalance=balance-200WHEREname='张三';-- 张三扣200UPDATEaccountSETbalance=balance+200WHEREname='李四';-- 李四加200-- 可选:创建保存点(如需部分回滚)SAVEPOINTtransfer_step;-- 3. 验证操作(可选)SELECT*FROMaccount;-- 4. 确认生效(无异常则提交)COMMIT;-- 如果操作出错(如余额不足),回滚事务-- ROLLBACK;-- 或回滚到保存点:ROLLBACK TO transfer_step;
注意点:

自动提交:MySQL 默认开启 “自动提交”(每条 DML 语句自动 COMMIT),开启事务后会暂时关闭自动提交;

回滚范围:只有 DML 语句(INSERT/UPDATE/DELETE)可回滚,DDL 语句(CREATE/DROP/ALTER)执行后会自动 COMMIT,无法回滚;

保存点:仅在当前事务内有效,事务提交 / 回滚后失效。

补:连接云服务器上的mysql的流程

首先连接到云服务器中,在云服务器上登录用户,使用 root 用户(或具有管理员权限的用户)登录 MySQL,执行命令:

mysql -u root -p

输入 MySQL root 密码后进入命令行界面。

下一步就是创建一个用户

创建用户 + 授权的基础语法:

-- 1. 创建用户(指定用户名、访问地址、密码)CREATEUSER'用户名'@'访问地址'IDENTIFIEDBY'密码';-- 2. 授予权限(指定权限、数据库/表、用户)GRANT权限列表ON数据库名.表名TO'用户名'@'访问地址';-- 3. 刷新权限(使授权生效)FLUSHPRIVILEGES;

示例:

允许远程访问(本地 / 其他服务器连接)

适合本地开发、其他服务器连接云服务器 MySQL 的场景:

-- 创建用户(允许任意地址访问,%代表所有IP)CREATEUSER'sql_user'@'%'IDENTIFIEDBY'YourStrongPassword123!';-- 仅授予查询+插入+修改权限(最小权限原则,避免删除风险)GRANTSELECT,INSERT,UPDATEONtest_db.*TO'sql_user'@'%';-- 刷新权限FLUSHPRIVILEGES;

提示:生产环境不建议用%(任意 IP),应指定具体 IP,比如:

CREATEUSER'sql_user'@'192.168.1.100'IDENTIFIEDBY'YourStrongPassword123!';-- 仅允许192.168.1.100访问

验证用户权限:

-- 查看用户权限SHOWGRANTSFOR'sql_user'@'%';-- 测试登录(服务器本机)mysql-u sql_user-p-- 远程测试(本地终端)mysql-h 云服务器IP-u sql_user-p

修改/删除用户

-- 修改用户密码ALTERUSER'sql_user'@'%'IDENTIFIEDBY'NewStrongPassword456!';-- 撤销权限REVOKEDELETEONtest_db.*FROM'sql_user'@'%';-- 删除用户DROPUSER'sql_user'@'%';

用户创建好了之后,在本地的客户端上运行mysql的客户端,新建连接,连接远程数据库,如下图所示

我使用的是Navicat Premium 17.0.8

五、常用进阶查询

1. 聚合函数

用于统计计算,常见的有COUNT()(计数)、SUM()(求和)、AVG()(平均值)、MAX()(最大值)、MIN()(最小值)。

-- 统计学生总数SELECTCOUNT(*)FROMstudent;-- 计算学生的平均年龄SELECTAVG(age)FROMstudent;-- 按班级分组,统计每个班级的学生数SELECTclass,COUNT(*)FROMstudentGROUPBYclass;
2. 多表关联查询(JOIN)

用于查询多个表中的关联数据,常见的有INNER JOIN(内连接)、LEFT JOIN(左连接)、RIGHT JOIN(右连接)。

-- 内连接:只查两张表中匹配的数据SELECTs.name,c.course_nameFROMstudent sINNERJOINscore cONs.id=c.student_id;-- 左连接:查左表所有数据,右表匹配不上的显示NULLSELECTs.name,c.course_nameFROMstudent sLEFTJOINscore cONs.id=c.student_id;
3.去重

DISTINCT是 SQL 内置的关键字(非函数),用于从查询结果中剔除重复的行 / 列值,是最基础也最常用的去重方式。

-- 单列去重SELECTDISTINCT列名FROM表名;-- 多列去重(多列值完全相同才会被判定为重复)SELECTDISTINCT列名1,列名2FROM表名;-- 结合WHERE条件去重SELECTDISTINCT列名FROM表名WHERE条件;
4.分组

GROUP BY是 SQL 中用于数据分组聚合的核心关键字,它的作用是将表中的数据按照指定列(或多个列)的相同值划分为多个 “组”,然后对每个组单独使用聚合函数(如COUNT/SUM/AVG)进行统计计算,是实现分类统计的必备工具。

语法:

SELECT分组列1,分组列2,聚合函数(统计列)FROM表名[WHERE筛选条件]-- 分组前筛选数据GROUPBY分组列1,分组列2-- 分组列必须和SELECT中非聚合列一一对应[HAVING分组后筛选条件];-- 分组后筛选组

示例:

假设 student 表数据如下:

idnameageclassscore
1张三20计算机 1 班85
2李四19计算机 1 班90
3王五21数学 2 班88
4赵六20数学 2 班92
5钱七22计算机 1 班80
-- 场景1:按班级分组,统计每个班级的学生人数SELECTclass,COUNT(*)ASstudent_countFROMstudentGROUPBYclass;-- 输出结果:-- class | student_count-- 计算机1班 | 3-- 数学2班 | 2-- 场景2:按班级分组,计算每个班级的平均分SELECTclass,AVG(score)ASavg_scoreFROMstudentGROUPBYclass;-- 输出结果:-- class | avg_score-- 计算机1班 | 85-- 数学2班 | 90

总结

核心高频语句SELECT(查询)、INSERT(新增)、UPDATE(修改)、DELETE(删除)是日常开发中最常用的 4 个语句,其中UPDATEDELETE必须加WHERE条件,避免误操作。

查询进阶WHERE(条件)、ORDER BY(排序)、GROUP BY(分组)、JOIN(多表关联)是实现复杂查询的核心,聚合函数(COUNT/SUM等)常用于数据统计。

DDL 语句谨慎用CREATE/ALTER/DROP涉及表结构修改,新手操作前务必备份数据,避免不可逆损失。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/5 20:24:54

机器学习的演进与深度学习的革命

从规则到洞察:机器学习的演进与深度学习的革命引言:当机器开始“学习”想象一下,你正在教一个孩子识别猫。你不会给他编写一套复杂的“猫识别规则”,而是展示大量猫的图片,并告诉他:“这些都是猫。”随着时…

作者头像 李华
网站建设 2026/2/4 3:25:13

PointMAE的代码配环境+运行

PointMAE的笔记 PointMAE的代码地址 1. 环境配置 我的cuda是115安装Pointnet2_PyTorch总是失败 所以我在隔离环境中创建了cuda113的环境 参考pip 隔离环境内 安装 cuda 113 不覆盖原有的全局 cuda 115 1.1 安装torch pip install torch1.12.1cu113 torchvision0.13.1cu113…

作者头像 李华
网站建设 2026/2/6 14:33:02

Spring 事务核心知识点全梳理(编程式 + 声明式 + 注解详解)

一、事务的基础概念1. 什么是事务?事务是一组不可分割的操作集合,这组操作要么 “同时成功”,要么 “同时失败”(即 “原子性”)。比如转账时 “扣 A 账户钱 加 B 账户钱”,这两步必须作为一个整体执行&am…

作者头像 李华
网站建设 2026/2/6 12:56:23

OpenCode:开源AI代理如何改变你的编程工作流

OpenCode是开源AI编码代理工具,代表AI编程从"补全"到"对话"再到"代理"的演进。它采用终端优先设计,支持多会话并行、MCP生态扩展,强调隐私与可控性。文章详解了其核心优势:开源可控、终端优先工作流…

作者头像 李华
网站建设 2026/2/3 7:07:25

大模型产业价值链深度解析:从基础设施到应用层的全景指南

大模型产业呈现四层价值链架构,当前超60%价值集中于基础设施层,未来将向MaaS服务及应用层传递。应用层分为软件平台(轻量化高毛利)和硬件载体(重投资长周期)。大模型厂商可选择开源、闭源或混合策略。基础设施层整合IDC承载、硬件算力、系统集成及软件调…

作者头像 李华