diff --git "a/37\350\276\276\345\205\264\345\273\272/\347\254\224\350\256\260/9.22 \346\255\273\351\224\201.md" "b/37\350\276\276\345\205\264\345\273\272/\347\254\224\350\256\260/9.22 \346\255\273\351\224\201.md" new file mode 100644 index 0000000000000000000000000000000000000000..dd62595289913c39e62b394f6ce50710affeae86 --- /dev/null +++ "b/37\350\276\276\345\205\264\345\273\272/\347\254\224\350\256\260/9.22 \346\255\273\351\224\201.md" @@ -0,0 +1,25 @@ +## 死锁 + +#### 死锁产生的原因 + +A事务和B事务需要使用资源1,2,但是A事务占用了资源1,B事务占用了资源2,两个事务同时等待对方资源释放。 死锁是指在一组进程中的各个进程均占有不会释放的资源,但因互相申请被其他进程所占用不会释放的资源而处于的一种永久等待状态。 + +#### 防止死锁产生: + +语句保持一致 事务语句不要写太长 + +--A用户 +--begin transaction: A-->语句1 +--语句1 update StuInfo set classid = 2 where StuName='xxx' +--语句2 update StuInfo set classid = 2 where StuName='xxx' +--commit transaction + +--B用户 +--begin transaction: B-->语句1 +--语句1: update StuInfo set classid = 2 where StuName='xxx' +--语句2: update StuInfo set classid = 2 where StuName='xxx' +--commit transaction + +事务只能整体完成 + +当一个事务无法结束时,另一个与之有关的事务就会陷入死锁,占用资源永久等待 \ No newline at end of file diff --git "a/37\350\276\276\345\205\264\345\273\272/\347\254\224\350\256\260/9.26 \345\202\250\345\255\230\350\277\207\347\250\213.md" "b/37\350\276\276\345\205\264\345\273\272/\347\254\224\350\256\260/9.26 \345\202\250\345\255\230\350\277\207\347\250\213.md" new file mode 100644 index 0000000000000000000000000000000000000000..579eaa59b57dc1aff410b8207a2714c476d5444f --- /dev/null +++ "b/37\350\276\276\345\205\264\345\273\272/\347\254\224\350\256\260/9.26 \345\202\250\345\255\230\350\277\207\347\250\213.md" @@ -0,0 +1,65 @@ +常见的系统存储过程有 +sp_databases 列出服务上的所有数据库 +sp_helpdb --报告有关指定数据库或所有数据库的信息 +sp_renamedb 更改数据库的名称 +sp_tables --返回当前环境下可查询的对象的列表 +sp_columns 返回某个表列的信息 +sp_help --返回某个表的所有信息 +sp_helpconstraint 查看某个表的约束 +sp_helpindex --查看某个表的索引 +sp_stored_procedures 列出当前环境中的所有存储过程 +sp_password --添加或修改登录账户的密码 +sp_rename 重命名存储过程 +sp_helptext 显示默认值,未加密的存储过程、用户定义的存储过程、触发器或视图的实际文本。 + +自定义存储过程 +create proc <存储过程名称> +as + +go + +2.有输入参数,没有输出参数的存储过程 +create proc <存储过程名称> +<变量1> <数据类型> +<变量2> <数据类型> +... +as + +go + +3.有输入参数,没有输出参数,但是有返回值的存储过程(返回值必须整数)。 +create proc <存储过程名称> +<变量1> <数据类型> +<变量2> <数据类型> +... +as + +return 整数 +go + +4.有输入参数,有输出参数的存储过程 & 一个变量具备同时输入输出参数的存储过程 +create proc <存储过程名称> +<变量1> <数据类型> output +<变量2> <数据类型> output +... +as + +return 整数 +go + +删除存储过程 +drop procedure <存储过程名称> + +存储过程与函数的区别 + +1.储存过程可以有返回值也可以无返回值。函数必须有返回值。 + +2.存储过程的实现比较复杂,而函数的实现比较有针对性。 + +3.储存过程可以输入输出参数,而函数只可以输入参数。 + +4.过程允许在其中选择以及DML语句,而函数只可以在其中select语句。 + +5.可以在存储过程中调用函数,不可以在函数中调用存储过程。 + +6.函数可以作为条件在语句中使用,但是存储过程不可以。 \ No newline at end of file