From b43ca3ff143b7caa6125db465ade9965ed93d507 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=B6=9B?= <3014619898@qq.com> Date: Mon, 26 Sep 2022 03:38:51 +0000 Subject: [PATCH 1/2] =?UTF-8?q?=E5=B0=8F=E9=BB=91=E5=AD=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 李涛 <3014619898@qq.com> --- ...07\347\250\213\344\275\234\344\270\232.md" | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 "45\346\235\216\346\266\233/\344\275\234\344\270\232/22926\345\202\250\345\255\230\350\277\207\347\250\213\344\275\234\344\270\232.md" diff --git "a/45\346\235\216\346\266\233/\344\275\234\344\270\232/22926\345\202\250\345\255\230\350\277\207\347\250\213\344\275\234\344\270\232.md" "b/45\346\235\216\346\266\233/\344\275\234\344\270\232/22926\345\202\250\345\255\230\350\277\207\347\250\213\344\275\234\344\270\232.md" new file mode 100644 index 0000000..c96b60f --- /dev/null +++ "b/45\346\235\216\346\266\233/\344\275\234\344\270\232/22926\345\202\250\345\255\230\350\277\207\347\250\213\344\275\234\344\270\232.md" @@ -0,0 +1,34 @@ + +--1. 定义存储过程实现查询出账户余额最低的银行卡账户信息,显示银行卡号,姓名,账户余额 +go +create proc proc_save +as +select CardNo,min(CardMoney)余额 ,RealName 姓名 from BankCard b join AccountInfo a on b.AccountId=a.AccountId group by CardNo,RealName +go +exec proc_save +--2. 模拟银行卡存钱操作,传入银行卡号,存钱金额,实现存钱操作yhuanben s +go +create proc proc_save2 +@id varchar(20), +@save money +as + update BankCard set CardMoney =CardMoney+@save where CardNo=@id + return @save +go +exec proc_save2 '6225547854125656','5000' +select * from BankCard +--3. 模拟银行卡取钱操作,传入银行卡号,取钱金额,实现取钱操作,取钱成功,返回1,取钱失败返回-1 +go +create proc proc_save3 +@id varchar (20), +@money money +as + declare @bb varchar(20) =(select CardMoney from BankCard where CardNo=@id) --找出余额 + if(@bb>@money) + + +go +--4. **查询出某时间段的银行存取款信息以及存款总金额**,取款总金额,传入开始时间,结束时间,显示存取款交易信息的同时,返回存款总金额,取款总金额。 +--5. **密码升级**,传入用户名和密码,如果用户名密码正确,并且密码长度<8,自动升级成8位密码 + +--(提示:随机生成 0-9 的整数: float(rand()*10)) rand():随机生成0.0-1.0的小数 float:向下取整) \ No newline at end of file -- Gitee From 2bfbc680f9dd21b7fe1d0deb04e4cb85e34decd9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9C=E6=9D=8E=E6=B6=9B=E2=80=9D?= <“3014619898@qq.com”> Date: Mon, 26 Sep 2022 21:26:52 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E5=B0=8F=E9=BB=91=E5=AD=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../220922\346\255\273\351\224\201.md" | 81 ++++++++++++ ...30\345\202\250\350\277\207\347\250\213.md" | 123 ++++++++++++++++++ ...26\350\247\246\345\217\221\345\231\250.md" | 2 +- 3 files changed, 205 insertions(+), 1 deletion(-) create mode 100644 "45\346\235\216\346\266\233/\347\254\224\350\256\260/220922\346\255\273\351\224\201.md" create mode 100644 "45\346\235\216\346\266\233/\347\254\224\350\256\260/220926 SQL\345\255\230\345\202\250\350\277\207\347\250\213.md" rename "45\346\235\216\346\266\233/\347\254\224\350\256\260/\350\247\246\345\217\221\345\231\250.md" => "45\346\235\216\346\266\233/\347\254\224\350\256\260/220926\350\247\246\345\217\221\345\231\250.md" (94%) diff --git "a/45\346\235\216\346\266\233/\347\254\224\350\256\260/220922\346\255\273\351\224\201.md" "b/45\346\235\216\346\266\233/\347\254\224\350\256\260/220922\346\255\273\351\224\201.md" new file mode 100644 index 0000000..89f21b1 --- /dev/null +++ "b/45\346\235\216\346\266\233/\347\254\224\350\256\260/220922\346\255\273\351\224\201.md" @@ -0,0 +1,81 @@ +### 死锁 + +所有[死锁]的原因可归结为资源的竞争 + + + +**表现一:** + +一个用户A 访问表A(锁住了表A),然后又访问表B 另一个用户B 访问表B(锁住了表B),然后企图访问表A 这时用户A由于用户B已经锁住表B,它必须等待用户B释放表B,才能继续,好了他老人家就只好老老实实在这等了 同样用户B要等用户A释放表A才能继续这就死锁了 + + + +**类似于微信前台调用输入法进程,导致QQ无法调用输入法进程(在安卓操作系统下)** + +**从而实现另类死锁 (死锁由操作系统所申引过来)具有可参考性** + + + +**表现二:** + +用户A读一条纪录,然后修改该条纪录,这是用户B修改该条纪录这里用户A的事务里锁的性质由共享锁企图上升到独占锁(forupdate),而用户B里的独占锁由于A有共享锁存在所以必须等A释放掉共享锁,而A由于B的独占锁而无法上升的独占锁也就不可能释放共享锁,于是出现了死锁 + + + +**NOLOCK** + +```sql +select count(*)from example with(NOLOCK) +``` + +概念上类似于READ UNCOMMITTED隔离级别 + +并且只针对于SELECT查询语句 + +不会阻止排它锁来更新数据行 + +能够提高并发性能,因为此时SQL Server数据库引擎不必去维护共享锁 + +也导致未提交的事务被读取 导致脏读 + + + +**READPAST** + +```sql +select count(*)from example with(READPAST) +``` + +SQL Server数据库引擎在返回结果集时将不会返回锁定的行或者数据页 + +不会返回锁定的行记录所以其优点好不存在脏读。 + +不包含锁定的行记录但是很难保证结果集或者修改语句是否包含我们所必须需要返回的行。(结果集不一定理想) + + + +**UPDLOCK** + +```sql +begin tran +select * from example with (updlock) where saleid=1 +--此时在开一个窗口查询 +select * from Example +``` + +针对于表中的某一行记录来**锁定**从而**阻止其他操作对该行的数据更新** + +UPDLOCK是**行级别**,而排它锁则是**表级别** + +当我们对某一行添加UPDLOCK提示时并**不会阻塞其他查询操作** + + + +**HOLDLOCK** + +```sql +begin tran +select * from example with (updlock,holdlock) where saleid=1 +``` + +使用HOLDLOCK提示时,此时查询将锁定表且被强制序列化,直到事务完成,才会被释放,其类似于SERIALIZABLE最高隔离级别 \ No newline at end of file diff --git "a/45\346\235\216\346\266\233/\347\254\224\350\256\260/220926 SQL\345\255\230\345\202\250\350\277\207\347\250\213.md" "b/45\346\235\216\346\266\233/\347\254\224\350\256\260/220926 SQL\345\255\230\345\202\250\350\277\207\347\250\213.md" new file mode 100644 index 0000000..a7114e6 --- /dev/null +++ "b/45\346\235\216\346\266\233/\347\254\224\350\256\260/220926 SQL\345\255\230\345\202\250\350\277\207\347\250\213.md" @@ -0,0 +1,123 @@ +### SQL存储过程 + +存储过程 ==Procedure== 是一组为了完成特定功能的SQL 语句(==预加载==) + +存储过程可以说是一个==记录集==,它是由一些T-SQL语句组成的代码块,这些T-SQL语句代码像一个方法一样==实现一些功能==(对单表或多表的增删改查),然后再给这个代码块取一个名字,(==封装==)在用到这个功能的时候调用 + + + +**优点:** + +1.预加载: + +存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度,效率要比T-SQL语句高。 + + + +2.封装性: + +2.1:当对数据库进行复杂操作时,可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。 + +2.2:存储过程可以重复使用,可减少数据库开发人员的工作量。 + +2.3:安全性高,可设定只有某些用户才具有对指定存储过程的使用权 + + + +3网络: + +一个存储过程在程序在网络中交互时可以替代大堆的T-SQL语句,所以也能降低网络的通信量,提高通信速率。 + + + +**基本语法** + +```sql +--创造存储过程 +create proc proc_name +@parameter data_type +... +as +T-sql语句 + +--调用存储过程 +exec pro_name ''--存储过程如果有参数,后面加参数格式为:@参数名=value,也可直接为参数值value + +--删除存储过程 +drop procedure procedure_name + +output 可加在变量 达成参数的传入与传出 +``` + + + +**无参数存储过程** + +```sql +go +create proc proc_name +as +T-sql语句 +go +``` + + + +**有参数存储过程** + +全局变量 + +```sql +create proc proc_name +@parameter data_type | @parameter data_type='name'(可以直接赋值) +as +T-sql语句 + +``` + +全局变量 + +把变量的内容输出,使用output + +```sql +create proc proc_name +@parameter data_type +@IsRight int output //传出参数 +as +if exists (T-sql语句|select S#,Sname,Sage,Ssex from student where sname=@sname) +set @IsRight =1 +else +set @IsRight=0 +go + +declare @IsRight int +exec StuProc 'name' , @IsRight output +select @IsRight +``` + +局部变量 + +```sql +create proc StuProc +as +declare @sname varchar(100) +set @sname='name' +select S#,Sname,Sage,Ssex from student where sname=@sname +go + +exec StuProc +``` + +显示局部变量 + +```sql +create proc StuProc +as +declare @sname varchar(100) +set @sname=(select Sname from student where S#=01) +select @sname +go + +exec StuProc +``` + diff --git "a/45\346\235\216\346\266\233/\347\254\224\350\256\260/\350\247\246\345\217\221\345\231\250.md" "b/45\346\235\216\346\266\233/\347\254\224\350\256\260/220926\350\247\246\345\217\221\345\231\250.md" similarity index 94% rename from "45\346\235\216\346\266\233/\347\254\224\350\256\260/\350\247\246\345\217\221\345\231\250.md" rename to "45\346\235\216\346\266\233/\347\254\224\350\256\260/220926\350\247\246\345\217\221\345\231\250.md" index dba9bd7..83c4c32 100644 --- "a/45\346\235\216\346\266\233/\347\254\224\350\256\260/\350\247\246\345\217\221\345\231\250.md" +++ "b/45\346\235\216\346\266\233/\347\254\224\350\256\260/220926\350\247\246\345\217\221\345\231\250.md" @@ -23,7 +23,7 @@ create trigger trigger_name on {table_name | view_name} -{for | After | Instead of } [ insert, update,delete ] +{for | After | Instead of(代替) } [ insert, update,delete ] as sql_statement --触发器内容 ``` -- Gitee