SQL 入门:搞懂增删改查、权限和事务,数据库才算真正入门

SQL 入门:搞懂增删改查、权限和事务,数据库才算真正入门

很多人第一次接触数据库,都会有一种感觉:

明明已经用过了,但又说不清它到底是什么。

比如你在 MySQL 里敲过这些命令:

SHOW DATABASES;
USE security;
SHOW TABLES;
SELECT * FROM users;
EXIT;

你可能觉得这只是“数据库命令”。

其实从你敲下这些语句开始,你已经在使用 SQL 了。

问题是,很多初学者学 SQL 的时候,上来就背概念、背分类、背语法,结果越学越乱。

今天这篇文章不准备跟你绕,我们就从最接地气的角度,把 SQL 这件事讲透:

这篇内容特别适合:

一、SQL 到底是什么?你其实早就用过了

SQL 的全称是:

Structured Query Language

中文一般叫:结构化查询语言。

注意,这个名字里虽然有“查询”两个字,但 SQL 绝不只是查询。

它不仅能查数据,还能:

也就是说,只要你在数据库里做操作,绝大多数最后都要落到 SQL 上。

一个很直观的理解方式

假设你打开 MySQL 命令行,执行:

SHOW DATABASES;

这是 SQL。

你切换数据库:

USE test;

这也是 SQL。

你查询表里的数据:

SELECT * FROM users;

还是 SQL。

所以别把 SQL 想得很玄,它本质上就是:

你和数据库沟通的标准语言。

数据库听不懂“大白话”,但它听得懂 SQL。

二、为什么说 SQL 是“非过程化语言”?

这个概念很多人第一次看会有点懵。

其实你把它和 Java、 这类编程语言对比一下,就明白了。

1)编程语言:你不仅要说“做什么”,还要说“怎么做”

比如你想实现一个排序,在 Java 或 里你得自己写:

也就是说,你必须明确告诉程序:

每一步具体怎么干

2)SQL:你只需要说“我要什么结果”

比如你想查 users 表里的所有数据,你只需要写:

SELECT * FROM users;

你不需要自己告诉数据库:

这些底层执行细节,数据库自己会处理。

这就是所谓的:

SQL 关注“做什么”,而不是“怎么做”。

举个最简单的例子你想从 users 表中查出用户名是 admin 的记录

SQL 写法:

SELECT * FROM users WHERE username = 'admin';

你只是描述需求:

至于底层怎么优化、怎么取数据、走不走索引,这部分交给数据库系统来决定。

三、SQL 的发展不是一成不变的,但入门阶段抓主干就够了

SQL 不是一天长成现在这样的,它经历了多年发展和标准化过程。

早期的 SQL 标准有多个版本,比如:

其中在实际学习中,SQL-99(也就是 SQL:1999) 是一个很重要的参考节点。

因为从这个阶段开始,SQL 体系已经相对完整成熟,后面虽然也不断演进,但对入门学习来说,核心思想变化没有那么夸张。

所以你现在学 SQL,不需要纠结版本史背得多细。

你真正要掌握的是:

四、SQL 不只是“查”,它一共可以分成五大类

这是初学 SQL 最重要的一块。

很多人总把 SQL 理解成查询语言sql语言是关系数据库语言,其实 SQL 是一个完整体系,通常可以分为五部分:

别被这些缩写吓到,其实一点都不难。

下面我按最直白的方式给你拆开。

五、DQL:数据查询语言,核心就是“查”

DQL 全称是:

Data Query Language

中文就是:数据查询语言。

它的核心用途只有一个:

查数据。

最典型的语句就是:

SELECT

最基础的查询语句

SELECT * FROM users;

意思是:

带条件查询

SELECT * FROM users WHERE username = 'admin';

这表示只查用户名为 admin 的记录。

运行结果示例

+----+----------+----------+
| id | username | password |
+----+----------+----------+
|  1 | admin    | admin123 |
+----+----------+----------+
1 row in set (0.00 sec)

DQL 是安全学习里的高频重点

为什么网络安全必须懂 DQL?

因为你后面会经常碰到:

如果连最基本的查询都看不懂,后面做 Web 安全会非常吃力。

六、DML:数据操作语言,核心就是“增删改”

DML 全称:

Data Manipulation Language

中文一般叫:数据操作语言。

它操作的对象不是表结构,而是表里的 数据内容。

核心动作就是三类:

再加上查询,经常就被合称为:

增删改查

1)插入数据:

INSERT INTO users(username, password)
VALUES ('test', '123456');

运行结果示例

Query OK, 1 row affected (0.00 sec)

2)修改数据:

UPDATE users
SET password = 'admin888'
WHERE username = 'admin';

运行结果示例

Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

3)删除数据:

DELETE FROM users
WHERE username = 'test';

运行结果示例

Query OK, 1 row affected (0.00 sec)

DML 和 DDL 最容易混

你一定要记住:

这是两个完全不同的层面。

比如:

七、DDL:数据定义语言,核心是“管结构”

DDL 全称:

Data Definition Language

中文叫:数据定义语言。

它管理的不是表里的数据,而是数据库对象本身,比如:

最常见的语句有:

1)创建数据库

CREATE DATABASE websec_demo;

运行结果示例

Query OK, 1 row affected (0.00 sec)

2)创建表

CREATE TABLE users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(50),
    password VARCHAR(100)
);

运行结果示例

Query OK, 0 rows affected (0.01 sec)

3)修改表结构

ALTER TABLE users
ADD email VARCHAR(100);

运行结果示例

Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

4)删除表

DROP TABLE users;

运行结果示例

Query OK, 0 rows affected (0.00 sec)

DDL 为什么重要?

因为数据库不是一开始就有的,很多业务系统开发前,第一步就是设计数据库结构。

对于安全工程师来说,DDL 同样重要,因为你在做靶场部署、环境恢复、导入 SQL 文件时,经常会遇到大量 TABLE、ALTER TABLE 语句。

八、DCL:数据控制语言,核心是“管权限”

DCL 全称:

Data Control Language

中文叫:数据控制语言。

它主要用来做什么?

给用户授权,或者收回权限。

最典型的两个语句:

举个最直接的例子

创建一个普通用户后,它默认没有什么权限。

这时你可以授权:

GRANT SELECT, INSERT, UPDATE, DELETE
ON websec_demo.*
TO 'app_user'@'localhost';

运行结果示例

Query OK, 0 rows affected (0.00 sec)

如果后面你觉得权限给多了,可以收回:

REVOKE DELETE
ON websec_demo.*
FROM 'app_user'@'localhost';

运行结果示例

Query OK, 0 rows affected (0.00 sec)

DCL 在安全里为什么特别关键?

因为数据库安全事故,很多时候不是漏洞复杂,而是权限过大。

典型风险包括:

所以懂 DCL,实际上是在理解数据库权限边界。

九、TCL:事务控制语言,核心是“要么一起成,要么一起失败”

TCL 全称:

Transaction Control Language

中文叫:事务控制语言。

这是很多人刚开始最容易觉得抽象的一块,但你只要记住“转账”这个例子,就不难理解。

为什么需要事务?

假设 A 给 B 转账 100 元,这件事表面看很简单,但数据库里至少涉及两步:

A 的账户减 100B 的账户加 100

如果第一步成功了,第二步失败了,会发生什么?

这就出大问题了。

所以数据库必须保证:

这两步要么都成功,要么都失败

这种“同生共死”的操作组合,就叫 事务。

TCL 常见语句转账案例代码

START TRANSACTION;
UPDATE bank_account SET balance = balance - 100 WHERE username = 'A';
UPDATE bank_account SET balance = balance + 100 WHERE username = 'B';
COMMIT;

如果中间发现异常,可以回滚:

START TRANSACTION;
UPDATE bank_account SET balance = balance - 100 WHERE username = 'A';
UPDATE bank_account SET balance = balance + 1000 WHERE username = 'B';
ROLLBACK;

运行结果示意提交成功时

Query OK, 0 rows affected (0.00 sec)
Query OK, 1 row affected (0.00 sec)
Query OK, 1 row affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)

回滚后

Query OK, 0 rows affected (0.00 sec)
Query OK, 1 row affected (0.00 sec)
Query OK, 1 row affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)

虽然执行过更新语句,但由于最后 ,数据会恢复到事务开始前的状态。

事务的核心意义

别把事务只理解成银行系统。

只要是一组操作之间存在强一致性要求SQL 入门:搞懂增删改查、权限和事务,数据库才算真正入门,都可能需要事务,比如:

十、为什么说数据库里大部分事情,最后都绕不开“增删改查”?

你以后不管做开发、运维、安全还是审计,最后会发现:

数据库的很多操作,本质上都是围绕这四件事展开的:

项目再复杂,系统再大,最终落到数据层,逃不出这个基本框架。

比如用户系统:

电商系统:

所以你只要把“增删改查”的底层逻辑吃透,后面学复杂 SQL、做注入分析、看漏洞原理,都会轻松很多。

十一、MySQL 里最基础的几条操作命令,先练熟再说

既然是入门,下面这些命令一定要会。

1)登录 MySQL

mysql -uroot -p

回车后输入密码。

也可以直接写成:

mysql -uroot -proot

不过这种写法会把密码直接暴露在命令行中,学习环境里可以用,生产环境不推荐。

2)查看所有数据库

SHOW DATABASES;

运行结果示例

+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| security           |
| test               |
+--------------------+

3)切换数据库

USE security;

运行结果示例

Database changed

4)查看当前数据库中的表

SHOW TABLES;

运行结果示例

+--------------------+
| Tables_in_security |
+--------------------+
| emails             |
| referers           |
| users              |
+--------------------+

5)退出 MySQL

QUIT;

或者:

EXIT;

运行结果示例

Bye

十二、代码案例:从建库到增删改查,带你完整跑一遍

下面给你一套最小可运行示例,建议直接自己敲一遍。

1)创建数据库

CREATE DATABASE sql_demo DEFAULT CHARACTER SET utf8mb4;

运行结果

Query OK, 1 row affected (0.00 sec)

2)切换数据库

USE sql_demo;

运行结果

Database changed

3)创建表

CREATE TABLE users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(50) NOT NULL,
    password VARCHAR(100) NOT NULL
);

运行结果

Query OK, 0 rows affected (0.01 sec)

4)插入数据

INSERT INTO users(username, password)
VALUES ('admin', 'admin123'),
       ('test', 'test123');

运行结果

Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

5)查询数据

SELECT * FROM users;

运行结果

+----+----------+----------+
| id | username | password |
+----+----------+----------+
|  1 | admin    | admin123 |
|  2 | test     | test123  |
+----+----------+----------+
2 rows in set (0.00 sec)

6)更新数据

UPDATE users SET password='123456' WHERE username='test';

运行结果

Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

7)再次查询

SELECT * FROM users;

运行结果

+----+----------+----------+
| id | username | password |
+----+----------+----------+
|  1 | admin    | admin123 |
|  2 | test     | 123456   |
+----+----------+----------+
2 rows in set (0.00 sec)

8)删除数据

DELETE FROM users WHERE username='test';

运行结果

Query OK, 1 row affected (0.00 sec)

9)最终查询

SELECT * FROM users;

运行结果

+----+----------+----------+
| id | username | password |
+----+----------+----------+
|  1 | admin    | admin123 |
+----+----------+----------+
1 row in set (0.00 sec)

十三、学网络安全sql语言是关系数据库语言,为什么 SQL 不是可选项,而是必修项?

这点一定要说清楚。

很多人觉得 SQL 是开发的事,安全只要会扫漏洞、会打靶就行。

这是典型误区。

你只要做这些事情,就离不开 SQL:

尤其是 SQL 注入,你如果连 SQL 基础都不懂, 看起来就像天书。

但只要你理解了:

很多注入原理就突然顺了。

十四、最后总结:先把五大类记清,再把增删改查练熟

SQL 入门阶段sql语言是关系数据库语言,别急着一头扎进复杂语法。

先把框架搭起来,后面学起来才不乱。

你可以先这样记:

SQL 五大类一句话总结

DQL:查数据
DML:改数据
DDL:改结构
DCL:管权限
TCL:管事务

学习顺序建议

如果你是初学者,我建议按这个顺序来:

1. 先学 MySQL 登录、切库、看表
2. 再学 SELECT 查询
3. 然后学 INSERT / UPDATE / DELETE
4. 接着学 CREATE / ALTER / DROP
5. 再理解用户授权和权限控制
6. 最后学事务和安全场景

最后一句话送给刚入门的朋友

数据库世界里最怕的不是语法多,而是分类不清。

只要你先把 SQL 的五大部分分清楚SQL 入门:搞懂增删改查、权限和事务,数据库才算真正入门,再去学具体命令,很多内容都会越学越顺。

公告:
1. 本站所有资源来源于用户上传和网络,如有侵权请联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系站长处理!
6. 本站不售卖代码,资源标价只是站长收集整理的辛苦费!如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。
7. 站长QQ号码 2205675299

资源库 - 资源分享下载网 » SQL 入门:搞懂增删改查、权限和事务,数据库才算真正入门

常见问题FAQ

关于资源售价和售后服务的说明?
本站所有资源的标价均为本站收集资源的辛苦费,不代表资源本身的价值。软件是高智慧高价值的商品,不可能是白菜价。本站资源标价只是赞助费用,收取的赞助费仅用来维持本站的日常运营!毕竟收集整理资料需要投入云计算资源和站长大量的精力。
代码有没有售后服务和技术支持?
由于代码的运行具有不可预见性,本站不保证代码完整可运行,不提供技术支持和售后服务。 本站原创代码都是站长自己开发的,可以有偿提供技术支持服务。 网站里标明【亲测】的代码都是站长亲测过的,其他的代码由于精力有限,没有一一测试,不能保证代码就一定能够使用,更没有技术支持服务,下载前请自行斟酌。
有没有搭建服务?
由于搭建服务比较费时费力,所以本站除了原创代码外均不提供搭建服务。本站分享代码纯属兴趣爱好,不以盈利为目的,请勿咨询有没有搭建服务,谢谢理解。
链接地址失效了怎么办?
请带上资源链接地址联系客服,工作时间内我们看到后将第一时间回复。
关于解压密码
本站资源一般都没有加密,如果发现需要解压密码的,那么就输入 hao.35dc.com 试试。

发表评论

资源库,由老程序员细心甄别、精心筛选,只为提供优质的源码资源

关于我们 联系我们