From 1a27078b7f4bdd85c43aa120dc3e253919d9a4fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BD=99=E9=87=91=E6=98=9F?= <3441777097@qq.com> Date: Sat, 17 Sep 2022 11:36:49 +0800 Subject: [PATCH 1/2] 10 --- .../\347\254\224\350\256\260/9.15-\350\247\206\345\233\276.md" | 1 - 1 file changed, 1 deletion(-) diff --git "a/10\344\275\231\351\207\221\346\230\237/\347\254\224\350\256\260/9.15-\350\247\206\345\233\276.md" "b/10\344\275\231\351\207\221\346\230\237/\347\254\224\350\256\260/9.15-\350\247\206\345\233\276.md" index a5217b8..8446e5f 100644 --- "a/10\344\275\231\351\207\221\346\230\237/\347\254\224\350\256\260/9.15-\350\247\206\345\233\276.md" +++ "b/10\344\275\231\351\207\221\346\230\237/\347\254\224\350\256\260/9.15-\350\247\206\345\233\276.md" @@ -23,7 +23,6 @@ create view 视图名 as select */(字段1,字段2,...) from 表名 -with check option ``` ##### 使用视图 -- Gitee From 3363bcebf01e6e6d5ca604ba01ba44e332b02881 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BD=99=E9=87=91=E6=98=9F?= <3441777097@qq.com> Date: Mon, 19 Sep 2022 21:29:19 +0800 Subject: [PATCH 2/2] 10 --- .../9.15-\350\247\206\345\233\276.md" | 39 ++++++++++ .../9.19-\344\272\213\345\212\241.md" | 75 +++++++++++++++++++ 2 files changed, 114 insertions(+) create mode 100644 "10\344\275\231\351\207\221\346\230\237/\347\254\224\350\256\260/9.19-\344\272\213\345\212\241.md" diff --git "a/10\344\275\231\351\207\221\346\230\237/\347\254\224\350\256\260/9.15-\350\247\206\345\233\276.md" "b/10\344\275\231\351\207\221\346\230\237/\347\254\224\350\256\260/9.15-\350\247\206\345\233\276.md" index 8446e5f..e6f3ef3 100644 --- "a/10\344\275\231\351\207\221\346\230\237/\347\254\224\350\256\260/9.15-\350\247\206\345\233\276.md" +++ "b/10\344\275\231\351\207\221\346\230\237/\347\254\224\350\256\260/9.15-\350\247\206\345\233\276.md" @@ -68,3 +68,42 @@ as select * from V_StuAge ``` +- 基于多个基表的视图:可以进行连表检索 + +```sql +--建立信息学院学生的特长属于艺术特长视图 +go +create view V_spec(学号,姓名,学院,特长) +as +(select tb_student.stu_num,name,school,speciality from tb_student +join tb_inf_student on tb_student.stu_num=tb_inf_student.stu_num +where speciality='艺术特长' and school='信息学院' +) +go +``` + +- 基于视图的视图:视图可作为另一视图建立的表 + +```sql +--建立信息学院->数据科学与大数据技术专业的学生视图 +go +create view V_profession(1,2,3,4,5) +as +(select * from V_StuMajor where 专业='数据科学与大数据技术') +go +``` + +- 分组视图:使用group by 建立视图 + +```sql +--建立各个生源地学生的荣誉总数视图 +go +create view V_SumPrize(生源地,荣誉总数) +as +(select ori_loca,sum(prize) from tb_inf_student group by ori_loca) +go +select * from V_SumPrize +``` + + + diff --git "a/10\344\275\231\351\207\221\346\230\237/\347\254\224\350\256\260/9.19-\344\272\213\345\212\241.md" "b/10\344\275\231\351\207\221\346\230\237/\347\254\224\350\256\260/9.19-\344\272\213\345\212\241.md" new file mode 100644 index 0000000..8bfebc0 --- /dev/null +++ "b/10\344\275\231\351\207\221\346\230\237/\347\254\224\350\256\260/9.19-\344\272\213\345\212\241.md" @@ -0,0 +1,75 @@ +## 事务 + +### 事务的属性(ACID) + +一般来说,事务具有四个标准属性,分别是原子性(**A**tomicity,或称不可分割性)、一致性(**C**onsistency)、隔离性(**I**solation,又称独立性)、持久性(**D**urability),简称 **ACID**。具体说明如下: + +#### 1. 原子性 + +一个事务中的所有 SQL 语句,要么全部执行成功,要么全部执行失败,不会结束在中间的某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。 + +#### 2.一致性 + +在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的数据必须完全符合所有的预设规则,其中包含数据的精确度、串联性以及后续数据库可以自发性地完成预定的工作。 + +#### 3.隔离性 + +数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。 死锁 操作系统 + +#### 4. 持久性 + +事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。 + +## 事务练习 + +```sql +1.--假设刘备取款6000,(添加check约束,设置账户余额必须>=0),要求:使用事务实现,修改余额和添加取款记录两步操作使用事务 +begin transaction +declare @mon money = 6000 +declare @no varchar(20) +declare @err int = 0 --一开始所有语句都没有错误 +select @no = cardno from BankCard where AccountId=(select AccountId from AccountInfo where RealName='刘备') +update BankCard set CardMoney=CardMoney-@mon where AccountId=(select AccountId from AccountInfo where RealName='刘备') +set @err += @@ERROR +insert CardExchange(CardNo,MoneyInBank,MoneyOutBank,ExchangeTime) values(@no,0,@mon,getdate()) +if @err>0 + begin + print '事务提交失败' + rollback transaction + end +else + begin + print '事务提交成功' + commit transaction + end +2.--刘备向张飞转账1000元,(添加check约束,设置账户余额必须>=0) +begin transaction +declare @zf char(18) +declare @lb char(18) +declare @err int = 0 +declare @money int = 1000 +select @lb = CardNo from AccountInfo ao +inner join BankCard bd on ao.AccountId=bd.AccountId +where RealName='刘备' +select @zf = CardNo from AccountInfo ao +inner join BankCard bd on ao.AccountId=bd.AccountId +where RealName='张飞' +alter table BankCard add constraint ck_Cardmoney check(cardmoney>=0) +UPDATE BankCard SET CardMoney=CardMoney-@money where CardNo=@lb +UPDATE BankCard SET CardMoney=CardMoney+@money where CardNo=@zf +set @err += @@ERROR +insert CardTransfer values(@lb,@zf,@money,GETDATE()) +insert CardExchange values(@lb,0,@money,GETDATE()) +insert CardExchange values(@zf,@money,0,GETDATE()) +if @err>0 + begin + print '转账失败' + rollback transaction + end +else + begin + print '转账成功' + commit transaction + end +``` + -- Gitee