From a53ae28bed8642bc1e518872e344c57610da2f28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E5=B9=B3?= <2466629710@qq.com> Date: Mon, 19 Sep 2022 15:26:42 +0000 Subject: [PATCH 1/3] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=96=87=E4=BB=B6=2035-?= =?UTF-8?q?=E5=BC=A0=E5=B9=B3/=E7=AC=94=E8=AE=B0/=E8=A7=86=E5=9B=BE2022-9-?= =?UTF-8?q?15.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../\350\247\206\345\233\2762022-9-15.md" | 127 ------------------ 1 file changed, 127 deletions(-) delete mode 100644 "35-\345\274\240\345\271\263/\347\254\224\350\256\260/\350\247\206\345\233\2762022-9-15.md" diff --git "a/35-\345\274\240\345\271\263/\347\254\224\350\256\260/\350\247\206\345\233\2762022-9-15.md" "b/35-\345\274\240\345\271\263/\347\254\224\350\256\260/\350\247\206\345\233\2762022-9-15.md" deleted file mode 100644 index d9fb04f..0000000 --- "a/35-\345\274\240\345\271\263/\347\254\224\350\256\260/\350\247\206\345\233\2762022-9-15.md" +++ /dev/null @@ -1,127 +0,0 @@ -#### 基于视图的操作 - -##### 定义视图 - -```sql ---建立视图 -create view <视图名> [(<列名>[,<列名>]...)] - as <子查询> [with check option] -``` - -##### 常见的视图形式 - -- 行列子集视图:去掉了某些行和某些列,但保留了主键 - -```sql ---建立信息学院学生的视图 -``` - -- with check option 视图 - -```sql ---建立信息学院学生的视图,并要求通过该视图进行的更新操作只涉及信息学院的学生 -``` - - - -- 带表达式的视图 - -```sql ---定义一个反映学生年龄的视图 -``` - - - -- 基于多个基表的视图:可以进行连表检索 - -```sql ---建立信息学院学生的特长属于艺术特长视图 -``` - - - -- 基于视图的视图:视图可作为另一视图建立的表 - -```sql ---建立信息学院->数据科学与大数据技术专业的学生视图 -``` - - - -- 分组视图:使用group by 建立视图 - -```sql ---建立各个生源地学生的荣誉总数视图 -``` - - - -##### 查询视图 - -##### 更新视图 - -##### 删除视图 - -```sql -drop view <视图名> ---该语句从数据字典中删除指定的视图定义 ---由该视图导出的其他视图仍在数据字典中,但不能使用,需要删除 ---删除基表时,由该基表导出的所有视图定义都必须显示删除 -``` - - - - - -#### 视图的设计原则 - -- 以 select * 方式创建的视图:可扩充性差,应尽可能避免 - - - -```sql ---视图 view: ---创建视图 -select * from tb_student ---建立一个学号,姓名,学院、专业的学生视图 ---1.行列子集视图 ---create view V_StuMajor(学号,姓名,学院,专业) ---as ---(select stu_num ,name ,school ,major from tb_student where school='信息学院') ---go - - ---2.with check option:视图更新 ---建立信息学院学生的视图,并要求通过该视图进行的更新操作只涉及信息学院的学生 ---create view V_StuMajor(学号,姓名,学院,专业) ---as ---(select stu_num ,name ,school ,major from tb_student where school='信息学院') ---with check option ---go - ---视图可以更新,不建议,一般直接对基表操作 ---update V_StuMajor set 姓名='王博文' where 学号=16130201 - ---insert V_StuMajor values(16101011,'蜗牛','信息学院','统计') - - - ---3.带表达式的视图 -定义一个反映学生年龄的视图 -create view V_StuAge(学号,姓名,年龄,学院,专业) -as -(select stu_num ,name ,year(getdate())-year(birth),school,major from tb_student) - -select * from V_StuAge - ---查询 ---保护数据安全性 ---简化用户操作 -select * from V_StuMajor --》视图消解法:自动转换成对基本的操作 select stu+num,.... from tb_student - -select stu_num ,name ,school ,major from tb_student where school='信息学院' - ---删除视图 -drop view V_StuMajor -``` - -- Gitee From 9883788a6d87a5e973818cc1fbfa1131c5f3f278 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E5=B9=B3?= <2466629710@qq.com> Date: Mon, 19 Sep 2022 15:42:09 +0000 Subject: [PATCH 2/3] =?UTF-8?q?=E7=AC=94=E8=AE=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 张平 <2466629710@qq.com> --- .../\344\272\213\345\212\2412022-09-19.md" | 48 ++++++++++ .../\350\247\206\345\233\2762022-9-15.md" | 96 +++++++++++++++++++ 2 files changed, 144 insertions(+) create mode 100644 "35-\345\274\240\345\271\263/\347\254\224\350\256\260/\344\272\213\345\212\2412022-09-19.md" create mode 100644 "35-\345\274\240\345\271\263/\347\254\224\350\256\260/\350\247\206\345\233\2762022-9-15.md" diff --git "a/35-\345\274\240\345\271\263/\347\254\224\350\256\260/\344\272\213\345\212\2412022-09-19.md" "b/35-\345\274\240\345\271\263/\347\254\224\350\256\260/\344\272\213\345\212\2412022-09-19.md" new file mode 100644 index 0000000..aef8a0d --- /dev/null +++ "b/35-\345\274\240\345\271\263/\347\254\224\350\256\260/\344\272\213\345\212\2412022-09-19.md" @@ -0,0 +1,48 @@ +## 事务 + + + +#### 一、什么是事务 + +**事务( Transaction)由一次或者多次基本操作构成,或者说,事务由一条或者多条 SQL 语句构成。** + +**事务中的所有 SQL 语句是一个整体,共同进退,不可分割,要么全部执行成功,要么全部执行失败。** + + + +#### 二、事务的属性(ACID) + +一般来说,事务具有四个标准属性,分别是原子性(**A**tomicity,或称不可分割性)、一致性(**C**onsistency)、隔离性(**I**solation,又称独立性)、持久性(**D**urability),简称 **ACID**。具体说明如下: + +1、原子性 + 保证任务中的所有操作都执行完毕;否则,事务会在出现错误时终止,并回滚之前所有操作到原始状态。 + +2、一致性 + +​ 事务必须使数据库从一个一致性状态变换到另一个一致性状态。 + +3、隔离性 + +​ 保证不同的事务相互独立、透明的执行。 + +4、持久性 + +事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。 + +#### 三、事务分类 + +1、显式事务 + 用 begin transaction 明确指定事务的开始,由 commit transaction 提交事务、rollback transaction 回滚事务到事务结束。 + +2、隐式事务 + + 通过设置 set implicit_transactions on 语句,将隐式事务模式设置为打开。当以隐式事务模式操作时,不必使用 begin transaction 开启事务,当一个事务结束后,这个模式会自动启用下一个事务。只需使用 commit transaction 提交事务或 rollback transaction 回滚事务即可。 + +3、自动提交事务 + +​ SQL Server的默认模式,它将每条单独的T-SQL语句视为一个事务。如果成功执行,则自动提交,否则回滚。 + + + + + diff --git "a/35-\345\274\240\345\271\263/\347\254\224\350\256\260/\350\247\206\345\233\2762022-9-15.md" "b/35-\345\274\240\345\271\263/\347\254\224\350\256\260/\350\247\206\345\233\2762022-9-15.md" new file mode 100644 index 0000000..4dd829d --- /dev/null +++ "b/35-\345\274\240\345\271\263/\347\254\224\350\256\260/\350\247\206\345\233\2762022-9-15.md" @@ -0,0 +1,96 @@ +## 视图 + +#### 关系(Relations) + +三种类型关系: + +- 表(Table)--基表,存储关系(Base Tables,Sorted relations) +- 视图(Views)--虚拟关系(Virtual relations)(不是物理存在的是虚拟的) +- 临时结果(Temporary results)--用于构建**子查询**的结果 + + + +#### 什么是视图 + +- 视图是一张虚拟表,它表示一张表的部分数据或多张表的综合数据,其结构和数据是建立在对表的查询基础上 +- 视图中并不存放数据,而是存放在视图所引用的原始表(基表)中,即基本中的数据发生变化,从视图中查询的数据也随之改变。 +- 同一张原始表,根据不同用户的不同需求,可以创建不同的视图 + +**视图的作用** + +- 视图能够简化用户的操作 +- 视图使用户能以多种角度看待同一数据 +- 视图对重构数据库提供了一定的逻辑独立性 +- 视图能够对机密数据提供安全保护 + +#### 基于视图的操作 + +##### 定义视图 + +```sql +--建立视图 +create view <视图名> [(<列名>[,<列名>]...)] + as <子查询> [with check option] +``` + +##### 删除视图 + +```sql +drop view <视图名> +--该语句从数据字典中删除指定的视图定义 +--由该视图导出的其他视图仍在数据字典中,但不能使用,需要删除 +--删除基表时,由该基表导出的所有视图定义都必须显示删除 +``` + +#### 视图的设计原则 + +- 以 select * 方式创建的视图:可扩充性差,应尽可能避免 + + + +```sql +--视图 view: +--创建视图 +select * from tb_student +--建立一个学号,姓名,学院、专业的学生视图 +--1.行列子集视图 +--create view V_StuMajor(学号,姓名,学院,专业) +--as +--(select stu_num ,name ,school ,major from tb_student where school='信息学院') +--go + + +--2.with check option:视图更新 +--建立信息学院学生的视图,并要求通过该视图进行的更新操作只涉及信息学院的学生 +--create view V_StuMajor(学号,姓名,学院,专业) +--as +--(select stu_num ,name ,school ,major from tb_student where school='信息学院') +--with check option +--go + +--视图可以更新,不建议,一般直接对基表操作 +--update V_StuMajor set 姓名='王博文' where 学号=16130201 + +--insert V_StuMajor values(16101011,'蜗牛','信息学院','统计') + + + +--3.带表达式的视图 +定义一个反映学生年龄的视图 +create view V_StuAge(学号,姓名,年龄,学院,专业) +as +(select stu_num ,name ,year(getdate())-year(birth),school,major from tb_student) + +select * from V_StuAge + +--查询 +--保护数据安全性 +--简化用户操作 +select * from V_StuMajor --》视图消解法:自动转换成对基本的操作 select stu+num,.... from tb_student + +select stu_num ,name ,school ,major from tb_student where school='信息学院' + +--删除视图 +drop view V_StuMajor +``` + -- Gitee From 547b3c90ccbc4b9726b585af19bccebf9174f1e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E5=B9=B3?= <2466629710@qq.com> Date: Wed, 21 Sep 2022 04:45:07 +0000 Subject: [PATCH 3/3] =?UTF-8?q?=E7=AC=94=E8=AE=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 张平 <2466629710@qq.com> --- .../\346\270\270\346\240\2072022-09-20.md" | 58 +++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 "35-\345\274\240\345\271\263/\347\254\224\350\256\260/\346\270\270\346\240\2072022-09-20.md" diff --git "a/35-\345\274\240\345\271\263/\347\254\224\350\256\260/\346\270\270\346\240\2072022-09-20.md" "b/35-\345\274\240\345\271\263/\347\254\224\350\256\260/\346\270\270\346\240\2072022-09-20.md" new file mode 100644 index 0000000..2b0b56e --- /dev/null +++ "b/35-\345\274\240\345\271\263/\347\254\224\350\256\260/\346\270\270\346\240\2072022-09-20.md" @@ -0,0 +1,58 @@ +# 游标 + +游标的概念 + 游标是一种能从包含多个元组的集合中每次读取一个元组的机制。游标总是和一段SELECT语句关联,SELECT语句查询出的结果集就作为集合,游标能每次从该集合中读取出一个元组进行不同操作。 + +#### 游标的作用 + +将游标定位在结果集特定元组。 +将游标指定结果集中的元组数据读出。 +利用循环读取结果集中的多个元组数据。 +对游标指定结果集的元组进行数据修改。 + +#### 游标分类: + +(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 <游标名> --当前位置的上一行 +``` + -- Gitee