diff --git "a/18\346\235\250\346\231\250\345\223\262/\344\275\234\344\270\232/9.20\346\270\270\346\240\207.md" "b/18\346\235\250\346\231\250\345\223\262/\344\275\234\344\270\232/9.20\346\270\270\346\240\207.md" new file mode 100644 index 0000000000000000000000000000000000000000..6db1ea30907f57ee70381ef0a1772d3befdf4b7a --- /dev/null +++ "b/18\346\235\250\346\231\250\345\223\262/\344\275\234\344\270\232/9.20\346\270\270\346\240\207.md" @@ -0,0 +1,28 @@ +---创建学生游标,该游标包含(学生姓名,兴趣爱好,生源地,荣誉总数) +declare cur cursor scroll for select name,hobby,ori_loca,prize from tb_student tt,tb_inf_student it where tt.stu_num=it.stu_num +open cur +declare @name varchar(10),@aihao varchar(20),@location varchar(20) +fetch first from cur into @name,@hobby,@loca,@prize +print @name+' '+@aihao+' '+@location +----- 循环遍历161开头的学生信息 +declare St cursor scroll for (select * from tb_student where stu_num like '161%') + +open St + +declare @num int ,@n varchar(10),@Sex varchar(4),@Birt varchar(10) ,@sch varchar(20),@maj varchar(20) + +fetch first from St into @num,@n ,@Sex ,@Birt ,@sch ,@maj + +while (@@FETCH_STATUS=0) +begin + +print convert(varchar(20),@num)+','+@n+ ','+@Sex+','+@Birt+','+@sch+','+@maj + +fetch next from St into @num,@n ,@Sex ,@Birt ,@sch ,@maj + +end + +close St + + +deallocate St diff --git "a/18\346\235\250\346\231\250\345\223\262/\344\275\234\344\270\232/9.21\345\207\275\346\225\260.md" "b/18\346\235\250\346\231\250\345\223\262/\344\275\234\344\270\232/9.21\345\207\275\346\225\260.md" new file mode 100644 index 0000000000000000000000000000000000000000..c1d39fee042fc516a0d45db878499e7b88dd5a77 --- /dev/null +++ "b/18\346\235\250\346\231\250\345\223\262/\344\275\234\344\270\232/9.21\345\207\275\346\225\260.md" @@ -0,0 +1,30 @@ +--(1)编写一个函数求该银行的金额总和 +go +create function Sum() +returns decimal +as +begin + declare @sum decimal + select @sum = (select sum(CardMoney) from BankCard) + return @sum +end +go +select dbo.Sum() + +--(2)传入账户编号,返回账户真实姓名 +go +create function Name +@id int +returns varchar(10) +as + begin + declare @name varchar(10) + select @name = (select RealName from AccountInfo join BankCard on BankCard.AccountId=AccountInfo.AccountId where AccountInfo.AccountId=@id) + return @name + end +go +select dbo.Name(10) +select * from AccountInfo +select * from BankCard +select * from CardStateChange +select * from CardExchange \ No newline at end of file diff --git "a/18\346\235\250\346\231\250\345\223\262/\344\275\234\344\270\232/9.6\346\237\245\350\257\242\344\275\234\344\270\232.md" "b/18\346\235\250\346\231\250\345\223\262/\344\275\234\344\270\232/9.6\346\237\245\350\257\242\344\275\234\344\270\232.md" new file mode 100644 index 0000000000000000000000000000000000000000..21a0ce964bb87eafb797277ef55336634a1c381a --- /dev/null +++ "b/18\346\235\250\346\231\250\345\223\262/\344\275\234\344\270\232/9.6\346\237\245\350\257\242\344\275\234\344\270\232.md" @@ -0,0 +1,92 @@ +--1. 为赵云此人进行开户开卡操作,赵云身份证:420107199904054233 +declare @zy varchar(20), @zyp varchar(20),@zyN varchar(20),@zyT smalldatetime +set @zy='420107199904054233' +set @zyp='12345678978' +set @zyN='赵云' +set @zyT=GETDATE() +insert AccountInfo values(@zy,@zyp,@zyN,@zyT) + +declare @zyc varchar(30),@zyi int, @zym varchar(30),@zyq money ,@zyz int, @zyti smalldatetime +set @zyc='6225547854165656' +set @zyi='4' +set @zym='123456' +set @zyq='500000' +set @zyz='1' +set @zyti=GETDATE() +insert BankCard values(@zyc,@zyi,@zym,@zyq,@zyz,@zyti) + + + +--2. 需要求出张飞的银行卡卡号和余额,张飞身份证:420107199602034138 (1.使用连接查询,2.使用变量) +declare @ZF varchar(20),@Carmoney money +select @ZF= CardNo from AccountInfo inner join BankCard on AccountInfo.AccountId=BankCard.AccountId where BankCard.AccountId='3' +select @Carmoney= CardMoney from AccountInfo inner join BankCard on AccountInfo.AccountId=BankCard.AccountId where BankCard.AccountId='3' +print @ZF +print @Carmoney +--#### 逻辑控制 + +-- 条件分支if-else + + + +--​ 3.某用户银行卡号为“6225547854125656”,该用户执行取钱操作,取钱5000元,余额充足则进行取钱操作,并提示"取钱成功",否则提示“余额不足”。 +declare @Money money +select @Money=CardMoney from BankCard where CardNo='6225547854125656' +print @Money +if @Money>=5000 +begin + set @Money=@Money-5000 + print'取钱成功' + print @Money +end +else print'余额不足' +-- 条件分支:case-when + + + + +--​ 4.查询银行卡信息,将银行卡状态1,2,3,4分别转换为汉字“正常,挂失,冻结,注销”,并且根据银行卡余额显示银行卡等级 30万以下为“普通用户”,30万及以上为"VIP用户", +----显示列分别为卡号,身份证,姓名,余额,用户等级,银行卡状态。 + +select CardNo 卡号,AccountCode 身份证,RealName 姓名,CardMoney 余额, +case +when CardMoney>=300000 then 'VIP用户' +when CardMoney>=0 then '普通用户' +else '无' +end '用户等级', +case +when CardState='1' then '正常' +when CardState='2' then '挂失' +when CardState='3' then '冻结' +when CardState='4' then '注销' +end '银行卡状态' +from BankCard inner join AccountInfo on BankCard.AccountId=AccountInfo.AccountId +--**while** + + + +--​ 5.循环打印1-10。 +declare @a int=1 +while (@a<10) +begin + set @a=@a+1 + print @a +end + + +--6、99乘法表 +declare @i int = 1 + +while @i<=9 +begin + declare @j int = 1 + declare @result varchar(500) = '' + while @j<=@i + begin + + set @result = @result + cast(@i as varchar(1)) + ' * ' + cast(@j as varchar(1)) + ' = '+ cast(@i*@j as varchar(1)) + char(9) + set @j =@j + 1 + end + print @result + set @i = @i + 1 +end \ No newline at end of file diff --git "a/18\346\235\250\346\231\250\345\223\262/\344\275\234\344\270\232/9.7\345\255\220\346\237\245\350\257\242\344\275\234\344\270\232.md" "b/18\346\235\250\346\231\250\345\223\262/\344\275\234\344\270\232/9.7\345\255\220\346\237\245\350\257\242\344\275\234\344\270\232.md" new file mode 100644 index 0000000000000000000000000000000000000000..ea479cbdd1331b264e35bfb191f113149a89aadf --- /dev/null +++ "b/18\346\235\250\346\231\250\345\223\262/\344\275\234\344\270\232/9.7\345\255\220\346\237\245\350\257\242\344\275\234\344\270\232.md" @@ -0,0 +1,34 @@ +--1. 关羽的银行卡号为"6225547858741263",查询出余额比关羽多的银行卡信息,显示卡号,身份证,姓名,余额。 +select bc.CardNo,ac.AccountCode,ac.RealName,bc.CardMoney from AccountInfo ac +inner join BankCard bc on ac.AccountId = bc.AccountId +where bc.CardMoney > all(select bc.CardMoney from AccountInfo ac + inner join BankCard bc on ac.AccountId = bc.AccountId + where ac.RealName = '关羽') + +--2. 从所有账户信息中查询出余额最高的交易明细(存钱取钱信息)。 +select bc.CardNo, ce.MoneyInBank 存钱 , ce.MoneyOutBank 取钱 from CardExchange ce +inner join BankCard bc on ce.CardNo = bc.CardNo +where bc.CardMoney = (select max(BankCard.CardMoney) from BankCard) + +--3. 查询有取款记录的银行卡及账户信息,显示卡号,身份证,姓名,余额。 +select b.* from CardStateChange c +inner join BankCard b on b.CardNo=c.CardNo +where c.CardNo =some (select CardNo from CardExchange where MoneyOutBank !=0 ) +--4. 查询出没有存款记录的银行卡及账户信息,显示卡号,身份证,姓名,余额。 +select b.* from CardStateChange c +inner join BankCard b on b.CardNo=c.CardNo +where c.CardNo =some (select CardNo from CardExchange where MoneyInBank =0 ) +--5. 关羽的银行卡号为"6225547858741263",查询当天是否有收到转账。 + +if exists(select * from CardTransfer where CardNoIn = '6225547858741263' +and convert(varchar(10),TransferTime, 120) = convert(varchar(10),getdate(), 120) +) + print '有转账记录' +else + print '没有转账记录' +--6. 查询出交易次数(存款取款操作)最多的银行卡账户信息,显示:卡号,身份证,姓名,余额,交易数。 + +select b.CardNo 卡号 ,AccountCode 身份证,RealName 姓名,CardMoney 余额,交易次数 from AccountInfo a +inner join BankCard b on a.AccountId=b.AccountId +inner join (select CardNo, count(*) 交易次数 from CardExchange group by CardNo) T on b.CardNo=T.CardNo +where 交易次数 =(select max(交易次数) from (select CardNo,count(*) 交易次数 from CardExchange group by CardNo) T) \ No newline at end of file diff --git "a/18\346\235\250\346\231\250\345\223\262/\344\275\234\344\270\232/\351\223\266\350\241\214\344\277\241\346\201\257.png" "b/18\346\235\250\346\231\250\345\223\262/\344\275\234\344\270\232/\351\223\266\350\241\214\344\277\241\346\201\257.png" new file mode 100644 index 0000000000000000000000000000000000000000..9d0d1fc04e0ac45731bf3619cb7d7f1a9260dfd5 Binary files /dev/null and "b/18\346\235\250\346\231\250\345\223\262/\344\275\234\344\270\232/\351\223\266\350\241\214\344\277\241\346\201\257.png" differ diff --git "a/18\346\235\250\346\231\250\345\223\262/9.14\345\210\206\351\241\265\347\264\242\345\274\225.md" "b/18\346\235\250\346\231\250\345\223\262/\347\254\224\350\256\260/9.14\345\210\206\351\241\265\347\264\242\345\274\225.md" similarity index 100% rename from "18\346\235\250\346\231\250\345\223\262/9.14\345\210\206\351\241\265\347\264\242\345\274\225.md" rename to "18\346\235\250\346\231\250\345\223\262/\347\254\224\350\256\260/9.14\345\210\206\351\241\265\347\264\242\345\274\225.md" diff --git "a/18\346\235\250\346\231\250\345\223\262/9.15\350\247\206\345\233\276.md" "b/18\346\235\250\346\231\250\345\223\262/\347\254\224\350\256\260/9.15\350\247\206\345\233\276.md" similarity index 100% rename from "18\346\235\250\346\231\250\345\223\262/9.15\350\247\206\345\233\276.md" rename to "18\346\235\250\346\231\250\345\223\262/\347\254\224\350\256\260/9.15\350\247\206\345\233\276.md" diff --git "a/18\346\235\250\346\231\250\345\223\262/\347\254\224\350\256\260/9.19\344\272\213\345\212\241.md" "b/18\346\235\250\346\231\250\345\223\262/\347\254\224\350\256\260/9.19\344\272\213\345\212\241.md" new file mode 100644 index 0000000000000000000000000000000000000000..ac00e6c86d5f203197489539fcdbea00605d2ed8 --- /dev/null +++ "b/18\346\235\250\346\231\250\345\223\262/\347\254\224\350\256\260/9.19\344\272\213\345\212\241.md" @@ -0,0 +1,27 @@ +## 事务 + +#### 概念 + +**事务( Transaction)由一次或者多次基本操作构成,或者说,事务由一条或者多条 SQL 语句构成。** + +**事务中的所有 SQL 语句是一个整体,共同进退,不可分割,要么全部执行成功,要么全部执行失败。** + +##### 一般来说,事务具有四个标准属性 + +##### 1.原子性 2.一致性 3.隔离性 4.持久性 + + + +#### 开始事务 + +COMMIT;或者START TRANSACTION; + +#### 提交事务 + +COMMIT; + +#### 回滚事务 + +Rollback; + +#### \ No newline at end of file diff --git "a/18\346\235\250\346\231\250\345\223\262/9.1SQL\351\253\230\347\272\247\347\254\224\350\256\260.md" "b/18\346\235\250\346\231\250\345\223\262/\347\254\224\350\256\260/9.1SQL\351\253\230\347\272\247\347\254\224\350\256\260.md" similarity index 100% rename from "18\346\235\250\346\231\250\345\223\262/9.1SQL\351\253\230\347\272\247\347\254\224\350\256\260.md" rename to "18\346\235\250\346\231\250\345\223\262/\347\254\224\350\256\260/9.1SQL\351\253\230\347\272\247\347\254\224\350\256\260.md" diff --git "a/18\346\235\250\346\231\250\345\223\262/\347\254\224\350\256\260/9.20\346\270\270\346\240\207.md" "b/18\346\235\250\346\231\250\345\223\262/\347\254\224\350\256\260/9.20\346\270\270\346\240\207.md" new file mode 100644 index 0000000000000000000000000000000000000000..220110927243369e901e8a143889121d94963e44 --- /dev/null +++ "b/18\346\235\250\346\231\250\345\223\262/\347\254\224\350\256\260/9.20\346\270\270\346\240\207.md" @@ -0,0 +1,29 @@ +## 游标 + +游标(cursor)是一个存储在MySQL服务器上的数据库查询,它不是一条SELECT语句,而是被该语句检索出来的结果集。在存储了游标之后,应用程序可以根据需要滚动或浏览其中的数据。 + +游标主要用于交互式应用,其中用户需要滚动屏幕上的数据,并对数据进行浏览或做出更改。不像多数DBMS,MySQL游标只能用于存储过程(和函数)。 + +#### 游标5个组成部分 + +1、声明 + +declare 游标名 cursor + +for + +select 语句 + + 2、打开 + +open 游标名; + + 3、从游标中查找信息 + +fetch...from 游标名 + +4、关闭 + +close 游标名; + +5、释放 \ No newline at end of file diff --git "a/18\346\235\250\346\231\250\345\223\262/\347\254\224\350\256\260/9.21\345\207\275\346\225\260.md" "b/18\346\235\250\346\231\250\345\223\262/\347\254\224\350\256\260/9.21\345\207\275\346\225\260.md" new file mode 100644 index 0000000000000000000000000000000000000000..94fbac184702aaa12e00e02f387f0f49db5add3f --- /dev/null +++ "b/18\346\235\250\346\231\250\345\223\262/\347\254\224\350\256\260/9.21\345\207\275\346\225\260.md" @@ -0,0 +1,53 @@ +## 函数 + +#### 函数分为 + +#### (1)系统函数: + +**从数据库返回在SQLSERVER中的值、对象或设置的特殊信息**(用于返回元数据或配置设置); + + + + +#### (2)自定义函数(方法:将一个功能封装成可重用的函数)。 + +##### (1)标量值函数(标量函数是基于输入的值,输出一个单一的值。) + +CREATE FUNCTION function_name(@parameter_name parameter_data_type) +RETURNS date_type + +[WITH ENCRYPTION] + +[AS] + +BEGIN + + function_body + + RETURN 表达式; + +END + +##### (2)表值函数(返回查询结果) + +表值函数提供强大的结果集生成能力。它可以在查询内部表或视图允许的任何地方使用。表值函数在使用上比返回一个结果集的[存储过程](https://so.csdn.net/so/search?q=存储过程&spm=1001.2101.3001.7020)更灵活,因为函数的结果集可以联接到查询中的其他表。 + +语法: + +create function 名称 + +([{@参数名称 参数类型[=默认值]}[,n]]) + +returns @局部变量 table(参数名 参数类型) + +[with encryption] + +[as] + +begin + +函数体 + +return 函数返回值 + +end \ No newline at end of file diff --git "a/18\346\235\250\346\231\250\345\223\262/\347\254\224\350\256\260/9.22\346\255\273\351\224\201.md" "b/18\346\235\250\346\231\250\345\223\262/\347\254\224\350\256\260/9.22\346\255\273\351\224\201.md" new file mode 100644 index 0000000000000000000000000000000000000000..2b892b61cfe0361ef9bfee1c1f220f7546ad354b --- /dev/null +++ "b/18\346\235\250\346\231\250\345\223\262/\347\254\224\350\256\260/9.22\346\255\273\351\224\201.md" @@ -0,0 +1,29 @@ +## 死锁 + +#### 原因 + +##### SQL Server数据库死锁,通俗的讲就是两个或多个trans,同时请求对方正在请求的某个实际应用对象,而导致双方互相等待。简单的例子如下: + +sql server死锁表现一: + +>    一个用户A 访问表A(锁住了表A),然后又访问表B。 +>    另一个用户B 访问表B(锁住了表B),然后企图访问表A, +>    这时用户A由于用户B已经锁住表B,它必须等待用户B释放表B,才能继续,好了他老人家就只好老老实实在这等了,同样用户B要等用户A释放表A才能继续,这就造成死锁了。 + +sql server死锁解决方法: +   这种死锁是由于你的程序的BUG产生的,除了调整你的程序的逻辑别无他法 +   仔细分析你程序的逻辑, +   1:尽量避免同时锁定两个资源 +   2: 必须同时锁定两个资源时,要保证在任何时刻都应该按照相同的顺序来锁定资源. + +**sql server死锁表现二:** + +>    用户A读一条纪录,然后修改该条纪录。 +>    这时用户B修改该条纪录,这里用户A的事务里锁的性质由共享锁企图上升到独占锁(for update),而用户B里的独占锁由于A有共享锁存在所以必须等A释 +>    放掉共享锁,而A由于B的独占锁而无法上升的独占锁也就不可能释放共享锁,于是出现了死锁。 +>    这种死锁比较隐蔽,但其实在稍大点的项目中经常发生 + +**sql server死锁解决方法:** +   让用户A的事务(即先读后写类型的操作),在select 时用Update lock +语法如下: +   select * from table1 with(updlock) where .... \ No newline at end of file diff --git "a/18\346\235\250\346\231\250\345\223\262/9.5\345\217\230\351\207\217.md" "b/18\346\235\250\346\231\250\345\223\262/\347\254\224\350\256\260/9.5\345\217\230\351\207\217.md" similarity index 100% rename from "18\346\235\250\346\231\250\345\223\262/9.5\345\217\230\351\207\217.md" rename to "18\346\235\250\346\231\250\345\223\262/\347\254\224\350\256\260/9.5\345\217\230\351\207\217.md" diff --git "a/18\346\235\250\346\231\250\345\223\262/9.6\351\200\273\350\276\221\346\216\247\345\210\266.md" "b/18\346\235\250\346\231\250\345\223\262/\347\254\224\350\256\260/9.6\351\200\273\350\276\221\346\216\247\345\210\266.md" similarity index 100% rename from "18\346\235\250\346\231\250\345\223\262/9.6\351\200\273\350\276\221\346\216\247\345\210\266.md" rename to "18\346\235\250\346\231\250\345\223\262/\347\254\224\350\256\260/9.6\351\200\273\350\276\221\346\216\247\345\210\266.md" diff --git "a/18\346\235\250\346\231\250\345\223\262/9.7\345\255\220\346\237\245\350\257\242.md" "b/18\346\235\250\346\231\250\345\223\262/\347\254\224\350\256\260/9.7\345\255\220\346\237\245\350\257\242.md" similarity index 100% rename from "18\346\235\250\346\231\250\345\223\262/9.7\345\255\220\346\237\245\350\257\242.md" rename to "18\346\235\250\346\231\250\345\223\262/\347\254\224\350\256\260/9.7\345\255\220\346\237\245\350\257\242.md" diff --git "a/18\346\235\250\346\231\250\345\223\262/9.8.md" "b/18\346\235\250\346\231\250\345\223\262/\347\254\224\350\256\260/9.8.md" similarity index 100% rename from "18\346\235\250\346\231\250\345\223\262/9.8.md" rename to "18\346\235\250\346\231\250\345\223\262/\347\254\224\350\256\260/9.8.md"