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

SQL 核心概念与实践总结

 1. SQL 语言分类

SQL 语言主要分为以下几类:

- DQL(数据查询语言):用于数据查询,主要是 SELECT 语句

- DCL(数据控制语言):用于权限控制,如 GRANT、REVOKE

- TCL(事务控制语言):用于事务管理,如 COMMIT、ROLLBACK

- DDL(数据定义语言):用于定义数据库对象,如 CREATE、ALTER、DROP

- DML(数据操作语言):用于数据操作,如 INSERT、DELETE、UPDATE

 2. DQL 数据查询语言详解

 2.1 DQL 组成结构

```sql

SELECT [字段列表]

FROM [表名]  

WHERE [条件]

GROUP BY [分组字段]

HAVING [分组后条件]

ORDER BY [排序字段]

LIMIT [分页限制]

```

 2.2 示例查询

```sql

-- 计算每个部门工资低于1000的员工数量

SELECT COUNT(empno), deptno

FROM emp

WHERE sal < 1000

GROUP BY DEPTNO;

-- 查询没有奖金的员工,按部门编号倒序排列

SELECT  FROM emp

WHERE comm IS NULL

ORDER BY deptno DESC;

-- 查询入职超过10年的员工

SELECT  FROM emp

WHERE DATE_ADD(HIREDATE, INTERVAL 10 YEAR) < NOW();

```

 3. 事务控制语言 (TCL)

 3.1 事务概念

事务是将一系列 DML 操作视为一个整体,保证它们要么都执行成功,要么都执行失败。

 3.2 事务特性 (ACID)

- 原子性:事务中的所有操作要么全部完成,要么全部不完成

- 一致性:事务必须使数据库从一个一致性状态变换到另一个一致性状态

- 隔离性:多个事务并发执行时,彼此互不干扰

- 持久性:事务一旦提交,对数据库的改变是永久性的

 3.3 事务并发问题

- 脏读:读到其他事务未提交的数据

- 幻读:读到其他事务添加或删除后提交的数据

- 不可重复读:读到其他事务修改后提交的数据

- 丢失修改:前后两次修改,丢失第一次修改的结果

 3.4 事务隔离级别

从低到高分为:

1. 读未提交数据

2. 读已提交数据

3. 可重复读

4. 串行化(可序列化)

 3.5 事务示例

```sql

-- 创建账户表

CREATE TABLE account(

    id INT PRIMARY KEY AUTO_INCREMENT,

    uname VARCHAR(10) NOT NULL,

    balance DOUBLE CHECK(balance >= 0)

);

INSERT INTO account VALUES(NULL, '张三', 500);

INSERT INTO account VALUES(NULL, '李四', 300);

-- 使用事务进行转账操作

START TRANSACTION;

UPDATE account SET balance = balance - 500 WHERE id = 1;

UPDATE account SET balance = balance + 500 WHERE id = 2;

COMMIT; -- 提交事务

-- ROLLBACK; -- 回滚事务

```

 4. 视图 (View)

 4.1 视图概念

视图是一张虚拟表,不存储实际数据,而是基于一个或多个实际表的查询结果。

 4.2 视图优点

- 保护隐私数据

- 简化复杂查询

- 提供逻辑数据独立性

 4.3 视图使用注意事项

1. 视图中不要有同名字段

2. 不建议对视图进行 DML 操作

3. 对视图主要进行查询操作

 4.4 视图示例

```sql

-- 创建视图

CREATE VIEW v_empDeptSalgrade AS

SELECT e., d.dname, d.loc, s.grade

FROM emp e

INNER JOIN dept d ON e.deptno = d.deptno

INNER JOIN salgrade s ON e.sal >= s.LOSAL AND e.sal <= s.HISAL;

-- 使用视图查询

SELECT  FROM v_empDeptSalgrade WHERE grade = 3;

```

 5. 索引 (Index)

 5.1 索引概念

索引是一种数据结构(通常是 B+ 树),用于加快数据检索速度,采用"以空间换时间"的理念。

 5.2 索引分类

- 全文索引

- 普通索引

- 主键索引

- 唯一索引

 5.3 索引使用场景

- 适合创建索引:经常查询的列、连接条件列、范围查询列

- 不适合创建索引:

  - 经常增删改的列

  - 有大量重复数据的列

  - 表记录太少

 5.4 破坏索引的情况

1. 对索引列进行模糊查询(如 LIKE '%value%')

2. 对索引列使用函数

3. 对索引列进行表达式计算

4. 使用 OR 条件或取反操作

 5.5 索引示例

```sql

-- 创建索引

CREATE INDEX index_emp_ename ON emp(ename);

-- 查看查询执行计划

EXPLAIN SELECT empno, ename, hiredate, job FROM emp WHERE empno = 7369;

```

 6. 总结

SQL 是数据库操作的核心语言,掌握其不同分类和特性对于高效数据库开发至关重要。DQL 用于数据查询,TCL 用于事务管理,视图和索引则是优化数据库性能和安全性的重要工具。合理使用这些技术可以显著提高数据库应用的效率和可靠性。

在实际开发中,应根据具体需求选择合适的技术:

- 复杂查询可考虑使用视图简化

- 高频查询字段可考虑添加索引

- 重要数据操作应使用事务保证数据一致性

- 注意避免索引失效的情况以提高查询性能


文章转载自:

http://doNxZnUZ.wffxr.cn
http://2gtdIYT5.wffxr.cn
http://hNPdCIIt.wffxr.cn
http://mKXVATOE.wffxr.cn
http://xU2Vy4Uu.wffxr.cn
http://O7ty7nDO.wffxr.cn
http://IVFoIDds.wffxr.cn
http://VWfaPmpK.wffxr.cn
http://ohaDWRFL.wffxr.cn
http://fPZM15tg.wffxr.cn
http://c8WPPlhE.wffxr.cn
http://LDIgK8Hs.wffxr.cn
http://Es0rpLD3.wffxr.cn
http://ZISnraFe.wffxr.cn
http://0RJ5exjA.wffxr.cn
http://CCBuS16o.wffxr.cn
http://JOqrV60m.wffxr.cn
http://4ITLEaY9.wffxr.cn
http://iLqx4C7G.wffxr.cn
http://3lGmYeis.wffxr.cn
http://CU5bioV2.wffxr.cn
http://c5OVbn4D.wffxr.cn
http://uK74ikyP.wffxr.cn
http://5dXrdTiY.wffxr.cn
http://uf3Ea1U2.wffxr.cn
http://eeQMtvAa.wffxr.cn
http://CYZ9AYCE.wffxr.cn
http://SGFM19U9.wffxr.cn
http://a8KxTjsG.wffxr.cn
http://WyYpIWPD.wffxr.cn
http://www.dtcms.com/a/383487.html

相关文章:

  • 【Tourbox】怎么复制预设?
  • RTT操作系统(2)
  • 基于STM32单片机智能手表GSM短信上报GPS定位防丢器设计
  • 力扣658.找到K个最接近的元素
  • LeetCode 面试经典 150_哈希表_赎金信(39_383_C++_简单)
  • LeetCode热题100--114. 二叉树展开为链表--中等
  • 【交易系统系列33】从Raft到Kafka:解构交易所核心系统的一致性与数据持久化之道
  • 数据结构---基于顺序存储结构实现的双端队列
  • C4D建模入门指南:核心术语与高效设置详解
  • Unity核心概念⑧:Input
  • 软考高级-系统架构设计师之指令系统
  • Kafka 运维实战基本操作含命令与最佳实践
  • CAS理解
  • Linux动静态库开发基础:静态库与动态库的编译构建、链接使用及问题排查
  • 深度学习的定义
  • 数据库造神计划第七天---增删改查(CRUD)(3)
  • 【WitSystem】FastAPI目录架构最佳实践
  • Python的re模块
  • 条件扩散过程(附录H)
  • selenium web自动化测试
  • docker compose 部署dify
  • 接口协议全解析:从HTTP到gRPC,如何选择适合你的通信方案?
  • 单例模式重新学习
  • 【系列文章】Linux中的并发与竞争[04]-信号量
  • Linux入门(二)
  • Transformer 面试题及详细答案120道(41-50)-- 训练与优化
  • UDP-Server(3)chat聊天室
  • 【不背八股】12.十大排序算法
  • 华清远见25072班网络编程学习day5
  • 【CMake】List