From 6dd3c5a8b3ae939dab69619eb0c5681b7f213559 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8F=B6=E5=B0=8F=E6=9D=B0?= <2365584215@qq.com> Date: Wed, 21 Sep 2022 21:29:27 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AC=94=E8=AE=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...65\344\270\216\347\264\242\345\274\225.md" | 0 .../2022.9.15 --\350\247\206\345\233\276.md" | 95 ++++++++++++++ .../2022.9.19--\344\272\213\345\212\241.md" | 36 ++++++ .../2022.9.20--\346\270\270\346\240\207.md" | 120 ++++++++++++++++++ .../2022.9.21--\345\207\275\346\225\260.md" | 81 ++++++++++++ ...ts\345\255\220\346\237\245\350\257\242.md" | 0 6 files changed, 332 insertions(+) rename "39\345\217\266\345\260\217\346\235\260/\347\254\224\350\256\260/2022-9-14\345\210\206\351\241\265\344\270\216\347\264\242\345\274\225.md" => "39\345\217\266\345\260\217\346\235\260/\347\254\224\350\256\260/2022.9.14--\345\210\206\351\241\265\344\270\216\347\264\242\345\274\225.md" (100%) create mode 100644 "39\345\217\266\345\260\217\346\235\260/\347\254\224\350\256\260/2022.9.15 --\350\247\206\345\233\276.md" create mode 100644 "39\345\217\266\345\260\217\346\235\260/\347\254\224\350\256\260/2022.9.19--\344\272\213\345\212\241.md" create mode 100644 "39\345\217\266\345\260\217\346\235\260/\347\254\224\350\256\260/2022.9.20--\346\270\270\346\240\207.md" create mode 100644 "39\345\217\266\345\260\217\346\235\260/\347\254\224\350\256\260/2022.9.21--\345\207\275\346\225\260.md" rename "39\345\217\266\345\260\217\346\235\260/\347\254\224\350\256\260/2022-9-8 exists\345\255\220\346\237\245\350\257\242.md" => "39\345\217\266\345\260\217\346\235\260/\347\254\224\350\256\260/2022.9.8-- exists\345\255\220\346\237\245\350\257\242.md" (100%) diff --git "a/39\345\217\266\345\260\217\346\235\260/\347\254\224\350\256\260/2022-9-14\345\210\206\351\241\265\344\270\216\347\264\242\345\274\225.md" "b/39\345\217\266\345\260\217\346\235\260/\347\254\224\350\256\260/2022.9.14--\345\210\206\351\241\265\344\270\216\347\264\242\345\274\225.md" similarity index 100% rename from "39\345\217\266\345\260\217\346\235\260/\347\254\224\350\256\260/2022-9-14\345\210\206\351\241\265\344\270\216\347\264\242\345\274\225.md" rename to "39\345\217\266\345\260\217\346\235\260/\347\254\224\350\256\260/2022.9.14--\345\210\206\351\241\265\344\270\216\347\264\242\345\274\225.md" diff --git "a/39\345\217\266\345\260\217\346\235\260/\347\254\224\350\256\260/2022.9.15 --\350\247\206\345\233\276.md" "b/39\345\217\266\345\260\217\346\235\260/\347\254\224\350\256\260/2022.9.15 --\350\247\206\345\233\276.md" new file mode 100644 index 0000000..4e8d3e1 --- /dev/null +++ "b/39\345\217\266\345\260\217\346\235\260/\347\254\224\350\256\260/2022.9.15 --\350\247\206\345\233\276.md" @@ -0,0 +1,95 @@ +## 视图 + +#### 关系(Relations) + +三种类型关系: + +- 表(Table)--基表,存储关系(Base Tables,Sorted relations) +- 视图(Views)--虚拟关系(Virtual relations)(不是物理存在的是虚拟的) +- 临时结果(Temporary results)--用于构建**子查询**的结果 + + + +**视图的作用** + +视图能够简化用户的操作 + +视图使用户能以多种角度看待同一数据 + +视图对重构数据库提供了一定的逻辑独立性 + +视图能够对机密数据提供安全保护 + +#### 基于视图的操作 + +##### 定义视图 + +```sql +--建立视图 +create view <视图名> [(<列名>[,<列名>]...)] + as <子查询> [with check option] +``` + +##### 常见的视图形式 + +- 行列子集视图:去掉了某些行和某些列,但保留了主键 + +```sql +--建立信息学院学生的视图 +create view V_StuMajor(学号,姓名,学院,专业) +as +(select stu_num ,name ,school ,major from tb_student where school='信息学院') +go + +``` + +- with check option 视图 + +```sql +--建立信息学院学生的视图,并要求通过该视图进行的更新操作只涉及信息学院的学生 +``` + + + +- 带表达式的视图 + +```sql +--定义一个反映学生年龄的视图 +create view V_StuMajor(学号,姓名,学院,专业) +as +(select stu_num ,name ,school ,major from tb_student where school='信息学院') +with check option +go +``` + +##### 查询视图 + +```sql +select * from V_StuMajor +``` + + + +##### 更新视图 + +```sql +update V_StuMajor set 姓名='王博文' where 学号=16130201 +``` + + + +##### 删除视图 + +```sql +drop view <视图名> +--该语句从数据字典中删除指定的视图定义 +--由该视图导出的其他视图仍在数据字典中,但不能使用,需要删除 +--删除基表时,由该基表导出的所有视图定义都必须显示删除 +``` + +#### 视图的设计原则 + +- 以 select * 方式创建的视图:可扩充性差,应尽可能避免 + + + diff --git "a/39\345\217\266\345\260\217\346\235\260/\347\254\224\350\256\260/2022.9.19--\344\272\213\345\212\241.md" "b/39\345\217\266\345\260\217\346\235\260/\347\254\224\350\256\260/2022.9.19--\344\272\213\345\212\241.md" new file mode 100644 index 0000000..b8ff3ac --- /dev/null +++ "b/39\345\217\266\345\260\217\346\235\260/\347\254\224\350\256\260/2022.9.19--\344\272\213\345\212\241.md" @@ -0,0 +1,36 @@ + + +## 事务 + +#### 什么是事务 + +**事务( Transaction)由一次或者多次基本操作构成,或者说,事务由一条或者多条 SQL 语句构成。** + +**事务中的所有 SQL 语句是一个整体,共同进退,不可分割,要么全部执行成功,要么全部执行失败。** + + + +#### 事务的属性(ACID) + +一般来说,事务具有四个标准属性,分别是原子性(**A**tomicity,或称不可分割性)、一致性(**C**onsistency)、隔离性(**I**solation,又称独立性)、持久性(**D**urability),简称 **ACID**。具体说明如下: + +##### 1) 原子性 + +一个事务中的所有 SQL 语句,要么全部执行成功,要么全部执行失败,不会结束在中间的某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。 + +##### 2) 一致性 + +在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的数据必须完全符合所有的预设规则,其中包含数据的精确度、串联性以及后续数据库可以自发性地完成预定的工作。 + +##### 3) 隔离性 + +数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。 死锁 操作系统 + +##### 4) 持久性 + +事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。 + +## + + + diff --git "a/39\345\217\266\345\260\217\346\235\260/\347\254\224\350\256\260/2022.9.20--\346\270\270\346\240\207.md" "b/39\345\217\266\345\260\217\346\235\260/\347\254\224\350\256\260/2022.9.20--\346\270\270\346\240\207.md" new file mode 100644 index 0000000..a6a14f4 --- /dev/null +++ "b/39\345\217\266\345\260\217\346\235\260/\347\254\224\350\256\260/2022.9.20--\346\270\270\346\240\207.md" @@ -0,0 +1,120 @@ +## 游标 + +#### 什么是游标 + +游标(Cursor)它使用户可逐行访问由SQL Server返回的结果集。使用游标(cursor)的一个主要的原因就是把集合操作转换成**单个记录处理方式**。用SQL语言从数据库中检索数据后,结果放在内存的一块区域中,且结果往往是一个含有多个记录的集合。游标机制允许用户在SQL server内逐行地访问这些记录,按照用户自己的意愿来显示和处理这些记录。 + +游标分类: + +(1)静态游标(Static):在操作游标的时候,数据发生变化,游标中数据不变 +(2)动态游标(Dynamic):在操作游标的时候,数据发生变化,游标中数据改变,默认值。 +(3)键集驱动游标(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 <游标名> +``` + diff --git "a/39\345\217\266\345\260\217\346\235\260/\347\254\224\350\256\260/2022.9.21--\345\207\275\346\225\260.md" "b/39\345\217\266\345\260\217\346\235\260/\347\254\224\350\256\260/2022.9.21--\345\207\275\346\225\260.md" new file mode 100644 index 0000000..9529398 --- /dev/null +++ "b/39\345\217\266\345\260\217\346\235\260/\347\254\224\350\256\260/2022.9.21--\345\207\275\346\225\260.md" @@ -0,0 +1,81 @@ +## 函数 + +函数看成一个处理某些数据的功能,因有返回值,则在代码使用中,需要一个处理过的数据。 +可直接**调用函数处理数据**,返回数据给代码使用。 + +标量函数:返回一个标量值。 +表格值函数{内联表格值函数、多表格值函数}:返回行集(即返回多个值) + +**标量函数和表格值函数的区别在于 返回是标量值(单个数字或者单个数据),还是表格值(多个数据)** + +### 标量函数 + +语法结构: + +```sql +CREATE FUNCTION function_name(@parameter_name parameter_data_type) --(@参数名 参数的数据类型) +RETURNS date_type --返回返回值的数据类型 + +[WITH ENCRYPTION] --如果指定了 encryption 则函数被加密 + +[AS] + +BEGIN + + function_body --函数体 + + RETURN 表达式; + +END +``` + +#### 引用自定义函数 + +```sql +select 用户名.函数名 as 字段别名 +select dbo.AvgResult('sooo2') as result +``` + +#### 表值函数 + +语法结构: + +```sql +**create function 函数名(参数)** +**return @dt table(列的定义)** +**[with{Encryption | Schemabinding}]** +**as** +**begin** +**SQL语句** +**end** +``` + +**returns @变量名(dt) table( 列定义 | 约束定义 )** + +**对表格变量中可以执行 select, insert, update, delete,** +**但select into 和 insert 语句的结果集是从存储过程插入。** + +```sql +create function tabcmess(@code nvarchar(50)) +returns @dt table(id @nvarchar(20),name @nvarchar(50)) +as + +begin +//添加表格变量数据 +insert into @dt select id name from tablename where name like @code + +return + +end +``` + +#### **表格值函数的引用** + +select * from tabcmess(‘qoooo3’) + +删除自定义函数 + +```sql +DROP function 函数名 +``` + diff --git "a/39\345\217\266\345\260\217\346\235\260/\347\254\224\350\256\260/2022-9-8 exists\345\255\220\346\237\245\350\257\242.md" "b/39\345\217\266\345\260\217\346\235\260/\347\254\224\350\256\260/2022.9.8-- exists\345\255\220\346\237\245\350\257\242.md" similarity index 100% rename from "39\345\217\266\345\260\217\346\235\260/\347\254\224\350\256\260/2022-9-8 exists\345\255\220\346\237\245\350\257\242.md" rename to "39\345\217\266\345\260\217\346\235\260/\347\254\224\350\256\260/2022.9.8-- exists\345\255\220\346\237\245\350\257\242.md" -- Gitee