From 3d80acf4f4cfdfa247d75a3ea4a787279fc78927 Mon Sep 17 00:00:00 2001 From: 15060864229 <1186491987@qq.com> Date: Mon, 26 Sep 2022 11:16:58 +0800 Subject: [PATCH 1/4] 0 --- .../2022.9.22\346\255\273\351\224\201.md" | 38 +++++ ...30\345\202\250\350\277\207\347\250\213.md" | 151 ++++++++++++++++++ 2 files changed, 189 insertions(+) create mode 100644 "08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/2022.9.22\346\255\273\351\224\201.md" create mode 100644 "08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/2022.9.26\345\255\230\345\202\250\350\277\207\347\250\213.md" diff --git "a/08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/2022.9.22\346\255\273\351\224\201.md" "b/08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/2022.9.22\346\255\273\351\224\201.md" new file mode 100644 index 0000000..7dad6b7 --- /dev/null +++ "b/08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/2022.9.22\346\255\273\351\224\201.md" @@ -0,0 +1,38 @@ +# 死锁 + +[死锁](https://so.csdn.net/so/search?q=死锁&spm=1001.2101.3001.7020)是指两个或者多个事务在同一资源上的相互占用,并请求锁定对方占用的资源,从而导致恶性循环的现象。 + +#### **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 .... + + + +#### 避免死锁: + +1. 以固定的顺序访问表和行。 +2. 大事务拆小。 +3. 同一事物的资源尽量一次锁定。 +4. 降低隔离级别。避免间隙锁 产生的死锁。 +5. 添加合理的索引。 \ No newline at end of file diff --git "a/08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/2022.9.26\345\255\230\345\202\250\350\277\207\347\250\213.md" "b/08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/2022.9.26\345\255\230\345\202\250\350\277\207\347\250\213.md" new file mode 100644 index 0000000..4804153 --- /dev/null +++ "b/08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/2022.9.26\345\255\230\345\202\250\350\277\207\347\250\213.md" @@ -0,0 +1,151 @@ +# 存储过程(Stored Procedure) + +存储过程是**预编译**SQL语句集合 + +#### 存储过程的优缺点 + +##### 优点 + +1、**存储过程可以一次编译多次使用。**存储过程只在创建时进行编译,之后的使用都不需要重新编译, 这就提升了 SQL 的执行效率。 + +2、**可以减少开发工作量。**将代码 封装 成模块,实际上是编程的核心思想之一,这样可以把复杂的问题 拆解成不同的模块,然后模块之间可以 重复使用 ,在减少开发工作量的同时,还能保证代码的结构清 晰。 + +3、**存储过程的安全性强。**我们在设定存储过程的时候可以 设置对用户的使用权限 ,这样就和视图一样具 有较强的安全性。 + +4、**可以减少网络传输量。**因为代码封装到存储过程中,每次使用只需要调用存储过程即可,这样就减 少了网络传输量。 + +5、**良好的封装性。**在进行相对复杂的数据库操作时,原本需要使用一条一条的 SQL 语句,可能要连接 多次数据库才能完成的操作,现在变成了一次存储过程,只需要 连接一次即可 。 + +##### 缺点 + +1、**可移植性差。**存储过程不能跨数据库移植,比如在 MySQL、Oracle 和 SQL Server 里编写的存储过 程,在换成其他数据库时都需要重新编写。 + +2、**调试困难。**只有少数 DBMS 支持存储过程的调试。对于复杂的存储过程来说,开发和维护都不容 易。虽然也有一些第三方工具可以对存储过程进行调试,但要收费。 + +3、**存储过程的版本管理很困难。**比如数据表索引发生变化了,可能会导致存储过程失效。我们在开发 软件的时候往往需要进行版本管理,但是存储过程本身没有版本控制,版本迭代更新的时候很麻烦。 + +4、**它不适合高并发的场景。**高并发的场景需要减少数据库的压力,有时数据库会采用分库分表的方 式,而且对可扩展性要求很高,在这种情况下,存储过程会变得难以维护, 增加数据库的压力 ,显然就 不适用了。 + + + +#### 存储过程与函数的区别 + +1.储存过程可以有返回值也可以无返回值。函数必须有返回值。 + +2.存储过程的实现比较复杂,而函数的实现比较有针对性。 + +3.储存过程可以输入输出参数,而函数只可以输入参数。 + +4.过程允许在其中选择以及DML语句,而函数只可以在其中select语句。 + +5.可以在存储过程中调用函数,不可以在函数中调用存储过程。 + +6.函数可以作为条件在语句中使用,但是存储过程不可以。 + +#### 常见的系统存储过程有 + +```sql +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 显示默认值,未加密的存储过程、用户定义的存储过程、触发器或视图的实际文本。 +``` + +### 语句 + +#### 自定义存储过程 + +##### **创建存储过程** + +1.没有输入参数,没有输出参数的存储过程。 + +```sql +create proc <存储过程名称> +as + +go +``` + +练习: 定义存储过程查询 年龄最小的学生信息 + +2.有输入参数,没有输出参数的存储过程 + +```sql +create proc <存储过程名称> +<变量1> <数据类型> +<变量2> <数据类型> +... +as + +go +``` + + + + + +3.有输入参数,没有输出参数,但是有返回值的存储过程(返回值必须整数)。 + +```sql +create proc <存储过程名称> +<变量1> <数据类型> +<变量2> <数据类型> +... +as + +return 整数 +go +``` + + + +4.有输入参数,有输出参数的存储过程 & 一个变量具备同时输入输出参数的存储过程 + +```sql +create proc <存储过程名称> +<变量1> <数据类型> output +<变量2> <数据类型> output +... +as + +return 整数 +go +``` + + + +##### **执行存储过程** + +```sql +--无参 +exec <存储过程名称> +--带参 +exec <存储过程名称> <形参1>,<形参2>,... +--带参带返回值 +declare @变量 +exec @变量 = <存储过程名称> <形参1>,<形参2>,... +--有输入参数,有输出参数的存储过程 +declare @变量 +exec <存储过程名称> <形参1>,<形参2>,@变量 output +--一个变量同时具备输入输出功能 +declare @变量 <数据类型> = 值 +exec <存储过程名称> <形参1>,<形参2>,@变量 output +``` + + + +##### **删除存储过程** + +```sql +drop procedure <存储过程名称> +``` + +#### \ No newline at end of file -- Gitee From 8a5c723028a3f3ba5d46702303a3eb8bc0bdf9a3 Mon Sep 17 00:00:00 2001 From: 15060864229 <1186491987@qq.com> Date: Tue, 27 Sep 2022 11:04:23 +0800 Subject: [PATCH 2/4] 0 --- ...27\350\247\246\345\217\221\345\231\250.md" | 72 +++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 "08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/2022.9.27\350\247\246\345\217\221\345\231\250.md" diff --git "a/08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/2022.9.27\350\247\246\345\217\221\345\231\250.md" "b/08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/2022.9.27\350\247\246\345\217\221\345\231\250.md" new file mode 100644 index 0000000..0ae9937 --- /dev/null +++ "b/08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/2022.9.27\350\247\246\345\217\221\345\231\250.md" @@ -0,0 +1,72 @@ +# 触发器 + + **触发器**( trigger )是作为**对数据库修改的连带效果**而**由系统自动执行**的一条语句。它是一种特殊的**存储过程**。也是一个**事务**(可以回滚)。 + +#### 六种DML(增删改)触发器: + +BEFORE INSERT - 在将数据插入表格之前激活。 +AFTER INSERT - 将数据插入表格后激活。 +BEFORE UPDATE - 在更新表中的数据之前激活。 +AFTER UPDATE - 更新表中的数据后激活。 +BEFORE DELETE - 在从表中删除数据之前激活。 +AFTER DELETE - 从表中删除数据后激活。 + +#### 触发器的功能 + +1. ##### 强化约束 + +触发器能够实现比 CHECK 语句更为复杂的约束。 +触发器可以很方便地引用其他表的列,去进行逻辑上的检查。 +触发器是在 CHECK 之后执行的 +触发器可以插入、删除、更新多行 + +2. ##### 跟踪变化 + +触发器可以检测数据库内的操作,从而禁止数据库中未经许可的更新和变化,以确保输入表中的数据的有效性。 +例如:库存系统中,触发器检测到当实际库存下降到需要再进货的临界值时,就给管理员相应提示信息或自动生成给供应商的订单。 + +3. ##### 级联运行 + +触发器可以检测数据库内的操作,并自动地级联影响整个数据库的不同表的各项内容。 +举例:删除主键的数据,外键表的数据可以修改为NULL或删除该数据。 + +4. ##### 调用存储过程 + +为了响应数据库更新,可以调用一个或多个触发器。 + + +#### 语句 + +###### 创建 + +```sql +CREATE TRIGGER <触发器名称> + +ON table_name + +[WITH ENCRYPTION] + +FOR [DELETE, INSERT, UPDATE] + +AS + + T-SQL语句 + +GO +--WITH ENCRYPTION表示加密触发器定义的SQL文本 + +--DELETE, INSERT, UPDATE指定触发器的类型 +``` + +查看 + +```sql +show triggers +``` + +删除 + +```sql +drop trigger [if exists] 触发器名字 +``` + -- Gitee From ec77a9404d3056d50e966a273ee88b06b6b19672 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E6=A5=B7=E9=92=8A?= <1186491987@qq.com> Date: Tue, 27 Sep 2022 03:05:51 +0000 Subject: [PATCH 3/4] =?UTF-8?q?=E9=87=8D=E5=91=BD=E5=90=8D=2008=E9=BB=84?= =?UTF-8?q?=E6=A5=B7=E9=92=8A/=E7=AC=94=E8=AE=B0/2022.9.14=E8=A7=86?= =?UTF-8?q?=E5=9B=BE.md=20=E4=B8=BA=2008=E9=BB=84=E6=A5=B7=E9=92=8A/?= =?UTF-8?q?=E7=AC=94=E8=AE=B0/2022.09.14=E8=A7=86=E5=9B=BE.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../2022.09.14\350\247\206\345\233\276.md" | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename "08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/2022.9.14\350\247\206\345\233\276.md" => "08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/2022.09.14\350\247\206\345\233\276.md" (100%) diff --git "a/08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/2022.9.14\350\247\206\345\233\276.md" "b/08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/2022.09.14\350\247\206\345\233\276.md" similarity index 100% rename from "08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/2022.9.14\350\247\206\345\233\276.md" rename to "08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/2022.09.14\350\247\206\345\233\276.md" -- Gitee From 10d7326d03fc5cb94bf0f73b430251cb4a901395 Mon Sep 17 00:00:00 2001 From: 15060864229 <1186491987@qq.com> Date: Tue, 27 Sep 2022 11:13:47 +0800 Subject: [PATCH 4/4] 0 --- .../2022.09.08\345\255\220\346\237\245\350\257\242.md" | 0 ...2022.09.08\346\216\222\345\272\217\345\207\275\346\225\260.md" | 0 .../2022.09.15\347\264\242\345\274\225.md" | 0 .../2022.09.20\346\270\270\346\240\207.md" | 0 .../2022.09.21\345\207\275\346\225\260.md" | 0 .../2022.09.22\346\255\273\351\224\201.md" | 0 ...2022.09.26\345\255\230\345\202\250\350\277\207\347\250\213.md" | 0 .../2022.09.27\350\247\246\345\217\221\345\231\250.md" | 0 8 files changed, 0 insertions(+), 0 deletions(-) rename "08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/2022.9.8\345\255\220\346\237\245\350\257\242.md" => "08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/2022.09.08\345\255\220\346\237\245\350\257\242.md" (100%) rename "08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/2022.9.8\346\216\222\345\272\217\345\207\275\346\225\260.md" => "08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/2022.09.08\346\216\222\345\272\217\345\207\275\346\225\260.md" (100%) rename "08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/2022.9.15\347\264\242\345\274\225.md" => "08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/2022.09.15\347\264\242\345\274\225.md" (100%) rename "08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/2022.9.20\346\270\270\346\240\207.md" => "08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/2022.09.20\346\270\270\346\240\207.md" (100%) rename "08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/2022.9.21\345\207\275\346\225\260.md" => "08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/2022.09.21\345\207\275\346\225\260.md" (100%) rename "08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/2022.9.22\346\255\273\351\224\201.md" => "08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/2022.09.22\346\255\273\351\224\201.md" (100%) rename "08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/2022.9.26\345\255\230\345\202\250\350\277\207\347\250\213.md" => "08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/2022.09.26\345\255\230\345\202\250\350\277\207\347\250\213.md" (100%) rename "08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/2022.9.27\350\247\246\345\217\221\345\231\250.md" => "08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/2022.09.27\350\247\246\345\217\221\345\231\250.md" (100%) diff --git "a/08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/2022.9.8\345\255\220\346\237\245\350\257\242.md" "b/08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/2022.09.08\345\255\220\346\237\245\350\257\242.md" similarity index 100% rename from "08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/2022.9.8\345\255\220\346\237\245\350\257\242.md" rename to "08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/2022.09.08\345\255\220\346\237\245\350\257\242.md" diff --git "a/08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/2022.9.8\346\216\222\345\272\217\345\207\275\346\225\260.md" "b/08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/2022.09.08\346\216\222\345\272\217\345\207\275\346\225\260.md" similarity index 100% rename from "08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/2022.9.8\346\216\222\345\272\217\345\207\275\346\225\260.md" rename to "08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/2022.09.08\346\216\222\345\272\217\345\207\275\346\225\260.md" diff --git "a/08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/2022.9.15\347\264\242\345\274\225.md" "b/08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/2022.09.15\347\264\242\345\274\225.md" similarity index 100% rename from "08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/2022.9.15\347\264\242\345\274\225.md" rename to "08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/2022.09.15\347\264\242\345\274\225.md" diff --git "a/08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/2022.9.20\346\270\270\346\240\207.md" "b/08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/2022.09.20\346\270\270\346\240\207.md" similarity index 100% rename from "08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/2022.9.20\346\270\270\346\240\207.md" rename to "08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/2022.09.20\346\270\270\346\240\207.md" diff --git "a/08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/2022.9.21\345\207\275\346\225\260.md" "b/08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/2022.09.21\345\207\275\346\225\260.md" similarity index 100% rename from "08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/2022.9.21\345\207\275\346\225\260.md" rename to "08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/2022.09.21\345\207\275\346\225\260.md" diff --git "a/08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/2022.9.22\346\255\273\351\224\201.md" "b/08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/2022.09.22\346\255\273\351\224\201.md" similarity index 100% rename from "08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/2022.9.22\346\255\273\351\224\201.md" rename to "08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/2022.09.22\346\255\273\351\224\201.md" diff --git "a/08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/2022.9.26\345\255\230\345\202\250\350\277\207\347\250\213.md" "b/08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/2022.09.26\345\255\230\345\202\250\350\277\207\347\250\213.md" similarity index 100% rename from "08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/2022.9.26\345\255\230\345\202\250\350\277\207\347\250\213.md" rename to "08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/2022.09.26\345\255\230\345\202\250\350\277\207\347\250\213.md" diff --git "a/08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/2022.9.27\350\247\246\345\217\221\345\231\250.md" "b/08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/2022.09.27\350\247\246\345\217\221\345\231\250.md" similarity index 100% rename from "08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/2022.9.27\350\247\246\345\217\221\345\231\250.md" rename to "08\351\273\204\346\245\267\351\222\212/\347\254\224\350\256\260/2022.09.27\350\247\246\345\217\221\345\231\250.md" -- Gitee