【计算机三级数据库技术】第8章 数据库后台编程技术--附思维导图

简介: 本文介绍了数据库后台编程的关键技术,包括存储过程、用户定义函数、触发器和游标,并附有思维导图。

1.png

1 存储过程

1.1 创建

(1)传参的存储过程

Create PROC [shema_name] proc_name
@变量名1 as varchar(20)
@变量名2 int 
AS 
select ....
where Address = @变量名1

(2)带返回值的存储过程

Create PROC [shema_name] proc_name
@变量名1 int
@变量名2 int output
AS 
select ....
Set  @变量名2 = 。。。

1.2 执行

Declare @res int
Exec Proc_name  5,7,@res output
print @ res

1.3 删除

Drop PROC proc_name

2 用户定义函数

2.1 创建和调用标量函数

(1)标量函数是返回单个数据值的函数

Create Function schema.function_name
(@cubelengh int,@cubewidth int ,@cubeheight int)
Return int
AS 
Begin
RETURN (@cubelength,@cubewidth,@cubeheight)
end

(2)调用:Select dbo.function_name(4,6,8)%dbo是架构名

2.2 创建和调用内联表值函数

(1)内联表函数的返回值是一个表,该表的内容是一个查询语句的结果

Create Function schema.function_name
(@cubelengh int,@cubewidth int ,@cubeheight int)
Return Table
AS 
RETURN (select ....)

2.3 创建和调用多语句表值函数

(1)基本概念
多语句表值函数的功能是视图和存储过程的组合,可以利用多语句表值函数返回一个表,表中的内容可由复杂的逻辑和多条SQL语句构建(类似于存储过程)可以在select 语句的From子句中使用多语句表值函数(同视图)

Create Function schema.function_name
(@cubelengh int,@cubewidth int ,@cubeheight int)
Returns @return_variable Table
AS 
BEGIN
....
RETURN
END

2.4 删除用自定义函数

Drop FUNCTION schema.function_name

3 触发器

3.1 基本概念

是一种特殊的存储过程,在于不需要由用户来直接调用,而是在对表中的数据进行UPdata、INsert、Delete操作时自动触发执行的。触发器是用于保证业务规则和数据完整性,其主要优点是用于可以用编程的方法来实现复杂的处理逻辑和商业规则,增强了数据完整性月约束的功能

3.2 创建触发器删除触发器

(1)创建

Create Trigger schema.trigger_name
On [Table|view]
For | After |INstead of
INSERT | UPDATE | DELETE
As ...
        FOR|After
                指定触发器只有在引发的SQL语句中指定的操作都已经成功执行,并且所有的约束检查也成功完成后,才执行此触发器(后触发器)
        Instead Of
                指定执行触发器而不是执行执行触发器执行的SQL,从而代替出发语句的操作(前触发器)
        INSERT | UPDATE | DELETE
                引发触发器执行的操作,若同时指定多个操作,则各操作之间用逗号分隔
    注意:After触发器,可以在同一个中操作上间建立多个触发器。但是对于Instead OF前触发器,只能建立一个触发器
  • 创建后触发器
                Create Trigger OperateCon
ON Table_sale For INSERT
AS
IF ....sql
Begin
ROLLBACK
END
ELSE 
....sql
  • 创建前触发器
Create Trigger OperateCon
ON Table_sale INSTEAD OF INSERT
AS
IF ....sql

(2)两个临时工作表

  • DELETED表
    用于存储Delete和UPdate语句所影响的行的副本,在执行Delete操作,被删除的数据被保存到Delete表中,在执行Update操作时,对于被修改操作影响的所有数据行,将更改前的数据保存到Delete表中,Deleted表和执行操作的基本表通常没有相同的数据行
  • INSERTED表
    用于存储INsert和UPdate语句所影响的行的副本,在执行INsert操作时,新插入的数据同时被保存到INserted表中,在执行Update操作时,对被修改操作影响的所有数据行,将更改后的数据保存到INSerted表中。INserted表中的内容是执行操作的基本表中新数据行的副本
  • 注意:UPdate操作类似于在删除之后执行插入:首先在执行操作的基本表中删除更新前的行,并将这些行复制到Deleted表中,然后将更新后的新行插入到执行操作的基本表和INSERTED表中

(3)删除

            DROP TRigger trigger_name

4 游标

4.1 游标的组成

游标结果集
游标当前指针

4.2 特点

    允许定位结果集中特定行
    允许从结果集的当前位置检索一行或多行
    支持对结果集中当前行的数据进行修改
    为由其他用户对显示在结果集中的数据所做的更改提供不同级别的可见性支持

4.3 使用游标

(1)声明游标

declare cursor_name [INSENSITIVE][SCROLL] CURSOR 
FOR select_sql
[FOR {Read ONLY |UPDATE of column_name}]
                INSENSITIVE:定义一个游标,以创建将由游标使用的数据的临时副本
                SCROLL:指定所有的提取选项均可用

(2)打开游标

            open cursor_name

(3)提取数据

FETCH [[NEXT | PRIOR | FIRST |LAST]
| ABSOLUTE n
| RELATIVE n
FROM
]
cursor_name [INTO @variable_name]
            NEXT:返回紧跟当前行之后的数据行
            PRIOR:返回紧邻当前行前面的数据行,并且当前行递减为结果行
            FIRST:返回游标中第一行并将其作为当前行
            LAST:返回游标中的最后一行并将其作为当前行
            ABSOLUTE n:n为正数,返回从游标开始第一行开始的第n行。n为负数,返回从游标最后一行开始之前的第n行
            RELATIVE n:如果n为正数,则返回当前行之后的第n行,并将返回的行称为新的当前行。为负数,返回当前行之前的n行

注意:在对游标数据进行提取的过程中,可以使用@@FETCH_STATUS全局变量判断数据提取的状态

(4)关闭游标

            CLOSE cursor_name

(5)释放游标

            DEALLOCATE CS_cursor

4.4 示例

Declare CS_cursor SCROLL CURSOR FOR
select Cname,BirthDate FROM Table_customer
Join SC ON S.Sno = SC.Sno
where Address Like' 北京市海淀区'
Order By BirthDdate DESC
Open CS_cursor
FETCH LAST FROM CS_cursor  --提取游标中的最后一行数据
FETCH ABSOLUTE 4 FROM CS_cursor --提取游标中的第4行数据
CLOSE CS_cursor
DEALLOCATE CS_cursor
目录
相关文章
|
2月前
|
关系型数据库 MySQL Java
【IDEA】java后台操作mysql数据库驱动常见错误解决方案
【IDEA】java后台操作mysql数据库驱动常见错误解决方案
111 0
|
1月前
|
数据库 索引
深入探索数据库索引技术:回表与索引下推解析
【10月更文挑战第15天】在数据库查询优化的领域中,回表和索引下推是两个核心概念,它们对于提高查询性能至关重要。本文将详细解释这两个术语,并探讨它们在数据库操作中的作用和影响。
56 3
|
1月前
|
数据库 索引
深入理解数据库索引技术:回表与索引下推详解
【10月更文挑战第23天】 在数据库查询性能优化中,索引的使用是提升查询效率的关键。然而,并非所有的索引都能直接加速查询。本文将深入探讨两个重要的数据库索引技术:回表和索引下推,解释它们的概念、工作原理以及对性能的影响。
80 3
|
2月前
|
存储 缓存 监控
数据库优化技术:提升性能与效率的关键策略
【10月更文挑战第15天】数据库优化技术:提升性能与效率的关键策略
99 8
|
2月前
|
存储 NoSQL 关系型数据库
数据库技术深度解析:从基础到进阶
【10月更文挑战第17天】数据库技术深度解析:从基础到进阶
104 0
|
6天前
|
存储 JSON NoSQL
学习 MongoDB:打开强大的数据库技术大门
MongoDB 是一个基于分布式文件存储的文档数据库,由 C++ 编写,旨在为 Web 应用提供可扩展的高性能数据存储解决方案。它与 MySQL 类似,但使用文档结构而非表结构。核心概念包括:数据库(Database)、集合(Collection)、文档(Document)和字段(Field)。MongoDB 使用 BSON 格式存储数据,支持多种数据类型,如字符串、整数、数组等,并通过二进制编码实现高效存储和传输。BSON 文档结构类似 JSON,但更紧凑,适合网络传输。
33 15
|
1月前
|
负载均衡 网络协议 数据库
选择适合自己的数据库多实例负载均衡技术
【10月更文挑战第23天】选择适合自己的数据库多实例负载均衡技术需要全面考虑多种因素。通过深入的分析和评估,结合自身的实际情况,能够做出明智的决策,为数据库系统的高效运行提供有力保障。
115 61
|
1天前
|
SQL Java 数据库连接
JDBC编程安装———通过代码操控数据库
本文,教你从0开始学习JBCD,包括驱动包的下载安装调试设置,以及java是如何通过JBDC实现对数据库的操作,以及代码的分析,超级详细
|
1月前
|
数据库连接 Go 数据库
Go语言中的错误注入与防御编程。错误注入通过模拟网络故障、数据库错误等,测试系统稳定性
本文探讨了Go语言中的错误注入与防御编程。错误注入通过模拟网络故障、数据库错误等,测试系统稳定性;防御编程则强调在编码时考虑各种错误情况,确保程序健壮性。文章详细介绍了这两种技术在Go语言中的实现方法及其重要性,旨在提升软件质量和可靠性。
34 1
|
1月前
|
SQL Java 数据库连接
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率。本文介绍了连接池的工作原理、优势及实现方法,并提供了HikariCP的示例代码。
55 3