From 194c8ea9a7b950c2c6df71a7e8373b7090f96e3f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E6=9E=AB?= <1687425871@qq.com> Date: Tue, 20 Sep 2022 02:25:17 +0000 Subject: [PATCH 1/3] 9.20 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 陈枫 <1687425871@qq.com> --- ...70\346\240\207\347\254\224\350\256\260.md" | 121 ++++++++++++++++++ 1 file changed, 121 insertions(+) create mode 100644 "03\351\231\210\346\236\253/\347\254\224\350\256\260/20220920-\346\270\270\346\240\207\347\254\224\350\256\260.md" diff --git "a/03\351\231\210\346\236\253/\347\254\224\350\256\260/20220920-\346\270\270\346\240\207\347\254\224\350\256\260.md" "b/03\351\231\210\346\236\253/\347\254\224\350\256\260/20220920-\346\270\270\346\240\207\347\254\224\350\256\260.md" new file mode 100644 index 0000000..dfdcb0a --- /dev/null +++ "b/03\351\231\210\346\236\253/\347\254\224\350\256\260/20220920-\346\270\270\346\240\207\347\254\224\350\256\260.md" @@ -0,0 +1,121 @@ +## 游标 + +#### 什么是游标 + +游标(Cursor)它使用户可逐行访问由SQL Server返回的结果集。使用游标(cursor)的一个主要的原因就是把集合操作转换成**单个记录处理方式**。用SQL语言从数据库中检索数据后,结果放在内存的一块区域中,且结果往往是一个含有多个记录的集合。游标机制允许用户在SQL server内逐行地访问这些记录,按照用户自己的意愿来显示和处理这些记录。 + +### 游标分类 + +- 静态游标(Static):在操作游标的时候,数据发生变化,游标中数据不变。 +- 动态游标(Dynamic):在操作游标的时候,数据发生变化,游标中数据改变,默认值。 +- 键集驱动游标(Keyset):在操作游标的时候,被标识的列发生改变,游标中数据改变;其它列改变,游标中数据不变。 + + + +#### 游标的使用 + +**创建游标:** + +```sql +--1.创建游标(Scroll代表滚动游标,不加Scroll则是只进的,只能支持fetch next) +declare <游标名> cursor scroll for select stuname from stuinfo +``` + +**打开游标:** + +```sql +open <游标名> +``` + +**关闭游标:** + +``` +close <游标名> +``` + +**删除游标:** + +``` +deallocate <游标名> +``` + + + +**提取数据操作:** + +```sql +fetch first from <游标名> --结果集的第一行 +fetch last from <游标名> --最后一行 +fetch absolute 1 from <游标名> --从游标的第一行开始数,第n行。 +fetch relative 3 from <游标名> --从当前位置数,第n行。 +fetch next from <游标名> --当前位置的下一行 +fetch prior from <游标名> --当前位置的上一行 +``` + + + +**提取数据给变量以供它用(取出第3行学生姓名,查询该学生详细信息):** + +```sql +declare @vari varchar(20) +fetch absolute 3 from <游标名> into @vari +select * from StuInfo where stuName = @vari +``` + +**利用游标提取所有的学生信息:** + +```sql +--方案一: +fetch absolute 1 from <游标名> +while @@FETCH_STATUS = 0 --@@FETCH_STATUS=0,提取成功,-1提取失败,-2行不存在 + begin + fetch next from <游标名> + end + +--方案二: +declare @myvar varchar(20) +fetch first from <游标名> into @myvar +while @@FETCH_STATUS = 0 + begin + print '提取成功'+@myvar + fetch next from <游标名> into @myvar + end +``` + +**利用游标修改和删除数据:** + +```sql +--更新语法: +-- fetch absolute 3 from <游标名> +-- update 语句 where Current of <游标名> + + +--练习1:修改周飘的班级id为1 + +--练习2:使用删除姓名为曾鹏的个人信息 + +``` + +**创建游标指向某行多列数据,并循环显示数据:** + +```sql +--此处如果指向所有数据,可以将for后面的语句修改成select * from stuinfo +declare <游标名> cursor scroll +declare mycursor cursor scroll for select stuname,StuSex,ClassID from stuinfo + +open <游标名> + +declare @name varchar(20) +declare @sex varchar(2) +declare @cid int +fetch first from mycursor into @name,@sex,@cid +while @@FETCH_STATUS=0 +fetch next from <游标名> into into @name,@sex,@cid + +while @@FETCH_STATUS = 0 --@@FETCH_STATUS=0,提取成功,-1提取失败,-2行不存在 + begin + print '提取成功' + fetch next from CURSORMember into@into @name,@sex,@cid + end +close <游标名> +``` -- Gitee From c38ecd87d2b666cf322ce87803f561fa7ee2617d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E6=9E=AB?= <1687425871@qq.com> Date: Wed, 21 Sep 2022 08:25:19 +0000 Subject: [PATCH 2/3] 9.19 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 陈枫 <1687425871@qq.com> --- ...13\345\212\241\347\254\224\350\256\260.md" | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 "03\351\231\210\346\236\253/\347\254\224\350\256\260/20220919-\344\272\213\345\212\241\347\254\224\350\256\260.md" diff --git "a/03\351\231\210\346\236\253/\347\254\224\350\256\260/20220919-\344\272\213\345\212\241\347\254\224\350\256\260.md" "b/03\351\231\210\346\236\253/\347\254\224\350\256\260/20220919-\344\272\213\345\212\241\347\254\224\350\256\260.md" new file mode 100644 index 0000000..b3468fa --- /dev/null +++ "b/03\351\231\210\346\236\253/\347\254\224\350\256\260/20220919-\344\272\213\345\212\241\347\254\224\350\256\260.md" @@ -0,0 +1,41 @@ +# 事务 + +### 事务的流程 + +- + +1. ##### 开始事务:BEGIN TRANSACTION + + 事务开始后,直接执行代码,通常在修改表的代码行后会插入全局变量(@ERROR)进行错误代码的判断,一般会定义变量来装错误代码(@ERROR),在执行代码后,会用if进行判断 + + @ERROR是否为0,若为0则提交事务(2),反之回滚(3) + +2. ##### 提交事务:COMMIT TRANSACTION + + 当代码块无错误时,直接执行代码块 + +3. ##### 回滚(撤销)事务:ROLLBACK TRANSACTION + + 当代码块有错误时,返回以上至begin之间已执行的代码。(相当于撤销) + +4. ##### 存储点语句:SAVE TRANSACTION + +#### 事务的属性(ACID) + +一般来说,事务具有四个标准属性,分别是原子性(**A**tomicity,或称不可分割性)、一致性(**C**onsistency)、隔离性(**I**solation,又称独立性)、持久性(**D**urability),简称 **ACID**。具体说明如下: + +##### 1) 原子性 + +一个事务中的所有 SQL 语句,要么全部执行成功,要么全部执行失败,不会结束在中间的某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。 + +##### 2) 一致性 + +在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的数据必须完全符合所有的预设规则,其中包含数据的精确度、串联性以及后续数据库可以自发性地完成预定的工作。 + +##### 3) 隔离性 + +数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。 死锁 操作系统 + +##### 4) 持久性 + +事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。 \ No newline at end of file -- Gitee From 1c3ed364c290f0df006e275f81559b36af27d4de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E6=9E=AB?= <1687425871@qq.com> Date: Wed, 21 Sep 2022 08:32:38 +0000 Subject: [PATCH 3/3] 9.21 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 陈枫 <1687425871@qq.com> --- ...75\346\225\260\347\254\224\350\256\260.md" | 79 +++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 "03\351\231\210\346\236\253/\347\254\224\350\256\260/20220921-\345\207\275\346\225\260\347\254\224\350\256\260.md" diff --git "a/03\351\231\210\346\236\253/\347\254\224\350\256\260/20220921-\345\207\275\346\225\260\347\254\224\350\256\260.md" "b/03\351\231\210\346\236\253/\347\254\224\350\256\260/20220921-\345\207\275\346\225\260\347\254\224\350\256\260.md" new file mode 100644 index 0000000..a9606fb --- /dev/null +++ "b/03\351\231\210\346\236\253/\347\254\224\350\256\260/20220921-\345\207\275\346\225\260\347\254\224\350\256\260.md" @@ -0,0 +1,79 @@ +## 函数 + +函数分为(1)系统函数:,(2)自定义函数(方法:将一个功能封装成可重用的函数)。 + +其中自定义函数又可以分为(1)标量值函数(返回单个值),(2)表值函数(返回查询结果) + +本文主要介绍自定义函数的使用。 + +#### 标量值函数 + +语法结构: + +```sql +CREATE FUNCTION function_name(@parameter_name parameter_data_type) --(@参数名 参数的数据类型) +RETURNS date_type --返回返回值的数据类型 + +[WITH ENCRYPTION] --如果指定了 encryption 则函数被加密 + +[AS] + +BEGIN + + function_body --函数体 + + RETURN 表达式; + +END +``` + +定义函数要求实现: + +实现两个值的加和 + +使用函数求某门课的平均成绩 + + + +#### 表值函数 + +语法结构: + +```sql +create function 名称 + +([{@参数名称 参数类型[=默认值]}[,n]]) + +returns @局部变量 table(参数名 参数类型) + +[with encryption] + +[as] + +begin + +函数体 + +return 函数返回值 + +end +``` + + + +删除自定义函数 + +```sql +DROP function 函数名 +``` + + + + + + + +``` + +``` + -- Gitee