数据库-第八/九章 数据库编程和优化【期末复习|考研复习】

前言

总结整理不易,希望大家点赞收藏。

给大家整理了一下数据库系统概论中的重点概念,以供大家期末复习和考研复习的时候使用。
参考资料是王珊老师和萨师煊老师的数据库系统概论(第五版)。


文章目录

  • 前言
  • 第八章 数据库编程
    • 8.1 嵌入式SQL
    • 8.2 嵌入式sql语句与主语言之间的通信
    • 8.3 游标
    • 8.4 动态SQL
    • 8.5 过程化SQL
    • 8.6 过程化SQL块:命名块,匿名块。
    • 8.7 存储过程:
  • 第九章 关系查询处理和查询优化
    • 9.1 查询处理
    • 9.2 查询优化
    • 9.3 SQL 优化
  • 练手题


第八章 数据库编程

8.1 嵌入式SQL

作为非过程化的查询语言SQL:操作统一、面向集合、功能丰富、使用简单。
但是:由于这种特性也导致了他难以实现应用业务中的逻辑控制。为了克服这个弱点就有了SQL编程。
嵌入式SQL:将SQL嵌入到程序设计语句中,数据库管理系统一般采用预编译的方法处理。就是识别出嵌入式语言,然后转成主语言。区分SQL语句和主语言语句:加前缀(exec sql, #sql)

8.2 嵌入式sql语句与主语言之间的通信

(1) 嵌入式SQL——>主语言执行状态信息,SQL通信区
(2) 主语言——>sql提供参数,主变量
(3) SQL语句——>主语言查询结果,主变量和游标
整个流程:(C语言)
EXEC SQL BEGIN DECLARE SECTION;//主变量声明开始
EXEC SQL END DECALRE SECTION;//主变量声明结束
Long SQLCODE;
EXEC SQL INCLUDE SQLCODE;//定义通信区
//主程序开始
EXEC SQL CONNECT TO … //连接数据库
EXEC SQL DECLARE SX CURSOR FOR+后面接一个SQL语句 //定义游标
EXEC SQL OPEN SX; //打开游标
循环从游标中取值
EXEC SQL FETCH SX INTO +主变量
这个时候用SQLCA.SQLCODE判断游标中是否还有没取出的值。Sqlcode!=0则退出循环
EXEC SQL CLOSE SX; //关闭游标
EXEC SQL COMMIT WORK; //提交更新
EXEC SQL DISCOUNNECT … //断开数据库连接

8.3 游标

游标:是用来存放SQL语句执行结果的缓冲区。必须使用游标的情况:多条记录的select语句,current形式的update和delete语句。
(1) 说明游标 EXEC SQL DECLARE C1 (游标名) CURSOR FOR +select 语句
(2) 打开游标EXEC SQL OPEN C1‘
(3) 推进游标指针取当前记录 EXEC SQL FETCH C1 INTO 主变量1,主变量2…(主变量和指示变量前加冒号:)
(4) 关闭游标 EXEC SQL CLOSE C1

8.4 动态SQL

主变量里用一个字符串寸SQL语句,可以将某些参数设为?
之后准备,再执行
EXEC SQL BEGIN DECLARE SECTION
Const char *stmt=”insert into student(sno) values(?);” //主变量定义
EXEC SQL END DECLARE SECTION
EXEC SQL PREPARE mystmt FROM :stmt; //准备语句prepare,给这个语句起个名字叫 mystmt
EXEC SQL EXECUTE mystmt USING 100; //执行语句execute

8.5 过程化SQL

基本结构是块,所有的过程化SQL程序都是由块组成的。
先DECLARE 执行时用BEGIN +SQL语句/流程控制语句 EXCEPTION 异常处理部分 END;
流程控制语句:IF; IF-THEN; (条件) LOOP, WHILE-LOOP, FOR-LOOP(循环) 赋值语句 变量名:=表达式

8.6 过程化SQL块:命名块,匿名块。

匿名块:每次执行时都要进行编译,不能被存储到数据库里。也不能在其他块里调用。
命名块:过程和函数是命名块,被编译后保存在数据库中,称为持久性存储模块,可以反复调用。

8.7 存储过程:

过程化SQL经编译和优化存储在数据库服务器中,不用编译,调用就可以了
(1) 创建存储过程 Create or replace procedure 过程名(参数1,2,3) AS 过程化SQL块
(2) 执行存储过程 Call /perform procedure 过程名(参数1,2,3)
(3) 修改存储过程 Alter procedure 过程名1 rename to 过程名2 //改名
Alter procedure 过程名 compile //重新编译
(4) 删除 Drop procedure 过程名; 函数和存储过程差不多,不同之处是函数必须指定返回类型

第九章 关系查询处理和查询优化

9.1 查询处理

查询处理:关系数据库管理系统执行查询语句的过程。把用户提交给关系数据库管理系统的查询语句转换为高效的查询执行计划。
分为四个阶段:
1.查询分析:扫描,词法分析,语法分析。
2.查询检查:语义检查。
3.查询优化:代数优化、物理优化。
4. 查询执行
选择操作:全表扫描,索引扫描
连接操作:嵌套循环(暴力算法),排序——合并算法,索引连接算法,hash-join算法

9.2 查询优化

查询优化:提高查询效率,使查询代价更小
物理优化:对存取路径和底层操作算法的优化(基于规则,基于代价估算,两者结合)
代数优化:对代数表达式进行优化(等价变换规则、启发式规则,优化查询树)

9.3 SQL 优化

插入数据:
大量插入采用load指令
主键优化:
表数据都是按照逐渐顺序组织存放的,采用页分裂和页合并来优化主键的索引组织表。、
order by优化:
建立合适的索引,多字段排序遵循最左前缀法则。尽量使用覆盖索引,select*容易出现回表查询,降低效率。在出现大数据量排序时,适当增加缓冲区大小。(覆盖索引是select的数据列只用从索引中就能够取得,不必读取数据行,换句话说查询列要被所建的索引覆盖。)
group by优化:
建立合适的索引,遵循最左前缀法则。
count优化:
1)count(主键):InnoDB引擎会遍历整张表,把每行的主键id值都取出来,返回给服务层,服务层拿到主键后,直接按行进行累加(主键不可能为空)。
2)count(字段):没有not null约束的话,InnoDB引擎会遍历整张表把每一行的字段值都取出来,返回给服务层,服务层判断是否为null,不为null,计数累加;有not null约束的话,InnoDB引擎会遍历整张表把每一行的字段值都取出来,返回给服务层,直接按行进行累加。
3)count(1):InnoDB 引擎遍历整张表,但不取值。服务层对于返回的每一层,放一个数字 1 进去,直接按行进行累加。
4)count(*):InnoDB 引擎并不会把全部字段取出来,而是专门做了优化,不取值,服务层直接按行进行累加。按效率排序:count(字段) < count(主键) < count(1) < count(),所以尽量使用 count()
update优化:InnoDB 的行锁是针对索引加的锁,不是针对记录加的锁,并且该索引不能失效,否则会从行锁升级为表锁。对于有主键索引的只会锁该行,没有索引的会把整张表加锁。

练手题

这里的练手题与第十一章并发控制一起做。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/728892.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java实战:电商平台通用取货码设计

在电商平台中&#xff0c;取货码是一种常见的机制&#xff0c;用于验证用户身份并允许他们从仓库或商店取货。一个好的取货码设计可以提高用户体验&#xff0c;增强安全性&#xff0c;并简化物流流程。本文将深入探讨电商平台通用取货码的设计原理&#xff0c;包括安全性、唯一…

UE4 Niagara 关卡4.1官方案例解析

we now directly supporting playing audio from arbitrary locations in particle systems.users have control over volume and pitch,and the system can directly play sound waves,or sound cues which have multiple waves in them.(我们现在直接支持在粒子系统中从任意…

Python 过滤函数filter()详解

一、过滤函数定义 它用于对容器中的元素进行过滤处理。 二、 过滤函数语法 filter(function,iterable) 参数function&#xff1a;提供过滤条件的函数&#xff0c;返回布尔型 参数iterable: 容器类型数据 三、过滤函数的应用场景 1、筛选符合条件的元素 需求&#xff1a;在列表…

Paddle上手实战——NLP经典cls任务“推特文本情感13分类”

Paddle上手实战——NLP经典cls任务“推特文本情感13分类” 实战背景介绍 数据地址:https://www.heywhale.com/home/activity/detail/611cbe90ba12a0001753d1e9/content Twitter推文具备多重特性,首要之处在于其与Facebook的显著区别——其完全基于文本形式,通过Twitter接…

微软大中华区商业应用事业部高级产品经理张诗源,将出席“ISIG-低代码/零代码技术与应用发展峰会”

3月16日&#xff0c;第四届「ISIG中国产业智能大会」将在上海中庚聚龙酒店拉开序幕。本届大会由苏州市金融科技协会指导&#xff0c;企智未来科技&#xff08;LowCode低码时代、RPA中国、AIGC开放社区&#xff09;主办。大会旨在聚合每一位产业成员的力量&#xff0c;深入探索低…

shell中判断字符串包含另一个字符串

除了用外部的命令比如expr、awk、sed等等&#xff0c;内置方法可以用截取、替换等方式得到一个新的字符串&#xff0c;如果新的字符串和原来的字符串有变化&#xff0c;说明变量包含字符串。 用替换为例: 查找变量a&#xff08;值复制为hello world ) 中是否有字符串or截取、替…

代码随想录算法训练营day14 | 二叉树的递归遍历、二叉树的迭代遍历、二叉树的统一迭代

今天开始二叉树的学习。 关于二叉树的理论基础&#xff0c;可以参考&#xff1a; 链接: 二叉树理论基础 目录 二叉树的递归遍历写递归的思路二叉树的前序遍历二叉树的中序遍历二叉树的后序遍历 二叉树的迭代遍历二叉树的前序遍历二叉树的中序遍历二叉树的后序遍历 二叉树的统…

JavaWeb实验 JSP 基本语法(续

实验目的 掌握JSP基本语法&#xff1b;掌握JSP常见用法。 实验内容 【1】创建index.jsp、first.jsp和second.jsp三个jsp文件&#xff0c;页面的内容分别显示“This is my JSP page of index.jsp.”、“This is my JSP page of first.jsp.”和“This is my JSP page of secon…

【vue2项目总结】——mixins 复用

文章目录 作用流程 作用 多个页面需要一个功能时&#xff0c;用mixins进行复用&#xff0c;使代码更简洁 流程 1 新建一个 mixin 文件 mixins/loginConfirm.js export default {methods: {// 是否需要弹登录确认框// (1) 需要&#xff0c;返回 true&#xff0c;并直接弹出登…

什么是AI智能答题?

AI智能答题是指利用人工智能&#xff08;AI&#xff09;技术&#xff0c;尤其是自然语言处理&#xff08;NLP&#xff09;和机器学习&#xff08;ML&#xff09;算法&#xff0c;来理解、分析并回答用户提出的问题的过程。这种技术可以应用于各种场合&#xff0c;包括在线教育平…

【Proteus仿真】【STM32单片机】井盖安全检测装置设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真STM32单片机控制器&#xff0c;使用LCD1602液晶显示模块、WIFI模块、蜂鸣器、LED按键、ADC PCF8591、角度/可燃气检测传感器等。 主要功能&#xff1a; 系统运行后&#xff0c;LC…

如何制作一份精美的数据分析可视化报告?详细教程

在数据可视化分析的最后阶段&#xff0c;所有的分析、研究、推导以及得出的结论&#xff0c;都汇总成了一份详实的报告。这份报告不仅是对整个数据分析旅程的总结&#xff0c;更是向读者展示这段旅程所取得的成果。 那么&#xff0c;数据分析报告该如何制作呢&#xff1f;不用…

python--宣传篇--personal-qrcode个性二维码

文章目录 准备代码效果 准备 代码 from MyQR import myqr import osdef get_img_qrcode(words, save_name, picture, colorizedTrue):if save_name[-3:] in ["jpg", "png", "gif"]:if picture[-3:] in ["png", "jpg", &qu…

nicegui学习使用

https://www.douyin.com/shipin/7283814177230178363 python轻量级高自由度web框架 - NiceGUI (6) - 知乎 python做界面&#xff0c;为什么我会强烈推荐nicegui 秒杀官方实现&#xff0c;python界面库&#xff0c;去掉90%事件代码的nicegui python web GUI框架-NiceGUI 教程…

Day2 DOM元素的操作

2.1 操作元素样式属性 1.通过 JS 设置/修改标签元素的样式属性 比如通过轮播图小圆点自动更换颜色样式 点击按钮可以滚动图片这是移动的图片的位置 left 等等 2.通过 style 属性操作 CSS 1.语法&#xff1a; <!DOCTYPE html> <html lang"en"> ​ <…

Java实战:Spring Boot整合Canal与RabbitMQ实时监听数据库变更并高效处理

引言 在现代微服务架构中&#xff0c;数据的变化往往需要及时地传播给各个相关服务&#xff0c;以便于同步更新状态或触发业务逻辑。Canal作为一个开源的MySQL binlog订阅和消费组件&#xff0c;能够帮助我们实时捕获数据库的增删改操作。而RabbitMQ作为一款消息中间件&#x…

C# 用 System.Xml 读 Freeplane.mm文件,生成测试用例.csv文件

Freeplane 是一款基于 Java 的开源软件&#xff0c;继承 Freemind 的思维导图工具软件&#xff0c;它扩展了知识管理功能&#xff0c;在 Freemind 上增加了一些额外的功能&#xff0c;比如数学公式、节点属性面板等。 编写 read_Xml.cs 如下 using System; using System.IO…

kmc密钥管理的基本功能是什么

KMC(密钥管理中心)在公钥基础设施中占据着举足轻重的地位&#xff0c;它是专门负责为CA(证书授权)系统提供一系列密钥服务的核心组件。这些服务包括但不限于密钥的生成、保存、备份、更新、恢复以及查询等&#xff0c;旨在解决分布式企业应用环境中大规模密码技术应用所带来的密…

Docker从0到1的开始【入门篇】

Docker是一种流行的容器化平台&#xff0c;它允许开发人员将应用程序及其所有依赖项打包到一个标准化的单元中&#xff0c;从而实现快速部署和可移植性。在本文中&#xff0c;我们将列出一些常用的Docker命令&#xff0c;以帮助您更好地了解和使用Docker。 1. 安装Docker 要安…

R语言:多值提取到点

ArcGIS中有相关工具实现多值提取到点的功能&#xff0c;在这里&#xff0c;我将使用R语言进行操作&#xff1a; library(dplyr) library(readxl) library(sf) library(raster)setwd("D:/Datasets") Bio <- stack(paste0("D:/Datasets/Data/worldclim2_1km/…