From 3247ed80129081ff60ed1d83626bd6aecbecdad6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=83=A1=E5=BF=97=E6=96=87?= <921158807@qq.com> Date: Mon, 26 Sep 2022 23:28:51 +0800 Subject: [PATCH 1/2] 123 --- .../20220920 \346\270\270\346\240\207.md" | 54 +++++++++++++++++++ .../2022922 \346\255\273\351\224\201.md" | 50 +++++++++++++++++ 2 files changed, 104 insertions(+) create mode 100644 "16\350\203\241\345\277\227\346\226\207/\347\254\224\350\256\260/20220920 \346\270\270\346\240\207.md" create mode 100644 "16\350\203\241\345\277\227\346\226\207/\347\254\224\350\256\260/2022922 \346\255\273\351\224\201.md" diff --git "a/16\350\203\241\345\277\227\346\226\207/\347\254\224\350\256\260/20220920 \346\270\270\346\240\207.md" "b/16\350\203\241\345\277\227\346\226\207/\347\254\224\350\256\260/20220920 \346\270\270\346\240\207.md" new file mode 100644 index 0000000..85f94fb --- /dev/null +++ "b/16\350\203\241\345\277\227\346\226\207/\347\254\224\350\256\260/20220920 \346\270\270\346\240\207.md" @@ -0,0 +1,54 @@ +### 一,事务 + +#### 1,概念 + +* 事务( Transaction)由一次或者多次基本操作构成,或者说,事务由一条或者多条 SQL 语句构成 + + + +#### 2,执行流程 + +* **开始事务(==begin transaction==) ** + +* **提交事务(==commit transaction==)** +* **回滚事务(==rollback transaction==)** +* **保存事务(==save transaction==)** + + + +#### 3、自动提交事务 + +* SQL Server的默认模式,它将每条单独的T-SQL语句视为一个事务。如果成功执行,则自动提交,否则回滚。 + + + +#### 4,分类 + +* **显式事务** + + 以begin trnsaction语句显示开始,以commit和rollback语句显示结束。在此过程中用户掌控着事务开始,结束与取消的操作 + +* **隐式事务** + + 当上一个事务结束后,系统隐式地自动开启一个新事务。每个事务都要显示地以commit和rollback语句结束 + + + +#### 5,属性(ACID) + +##### (1) 原子性(**A**tomicity,或称不可分割性) + +* **一个事务中的所有 SQL 语句,要么全部执行成功,要么全部执行失败,不会结束在中间的某个环节。**事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样 + +##### (2) 一致性(**C**onsistency) + +* 在事务开始之前和事务结束以后,**数据库的完整性没有被破坏**。这表示写入的数据必须完全符合所有的预设规则,其中包含数据的精确度、串联性以及后续数据库可以自发性地完成预定的工作 + +##### (3) 隔离性(**I**solation,又称独立性) + +* 数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以**防止多个事务并发执行时由于交叉执行而导致数据的不一致**。 +* 事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable) + +##### (4) 持久性(**D**urability) + +* 事务处理结束后,**对数据的修改就是永久的**,即便系统故障也不会丢失 \ No newline at end of file diff --git "a/16\350\203\241\345\277\227\346\226\207/\347\254\224\350\256\260/2022922 \346\255\273\351\224\201.md" "b/16\350\203\241\345\277\227\346\226\207/\347\254\224\350\256\260/2022922 \346\255\273\351\224\201.md" new file mode 100644 index 0000000..09c6d80 --- /dev/null +++ "b/16\350\203\241\345\277\227\346\226\207/\347\254\224\350\256\260/2022922 \346\255\273\351\224\201.md" @@ -0,0 +1,50 @@ +### 一,死锁 + +#### 1,概念 + +* 指第一个事务正在进行数据更新操作,第二个事务选择读取了尚未被确认的数据或者读取的是第一个事务正在更新的数据行,由此产生未被确认的相关性问题 + +#### 2,分类 + +##### (1)从数据库视角分析 + +* 独占锁/排他锁(exclusive lock);主要用于数据的修改 +* 共享锁(shared lock);主要用于数据的读取 +* 更新锁(update lock);主要用于数据的更新 + +##### (2)从程序员视角分析 + +* 乐观锁(optimistic lock);进行数据处理时不需要用户额外进行任何工作 +* 悲观锁(pessimistic lock);系统不对任何锁操作负责,对数据或资源对象的加锁操作均由用户直接管理(包括获取,共享和释放任何在数据上使用的锁) + + + +#### 3、产生条件 + +##### (1)请求与保持;已经获取资源的同时可以再次申请新资源 + +##### (2)非剥夺;已经分配的资源不能被剥夺,只能在使用完后自己释放 + +##### (3)循环等待;进程的等待形成环路,都等待相邻进程占据的资源 + +##### (4)互斥;某一时刻,资源只能被一个进程所占有 + + + +#### 4,处理死锁的基本方法 + +##### 1.预防死锁:通过设置一些限制条件,去破坏产生死锁的必要条件 + +##### 2.避免死锁:在资源分配过程中,使用某种方法避免系统进入不安全的状态,从而避免发生死锁 + +##### 3.检测死锁:允许死锁的发生,但是通过系统的检测之后,采取一些措施,将死锁清除掉 + +##### 4.解除死锁:该方法与检测死锁配合使用 + + + +#### 5,查询 + +##### 1,查询所有进程锁(exec sp_lock) + +##### 2,查询指定进程n的锁( exec sp_lock n) \ No newline at end of file -- Gitee From 9ac661461892d43d9a4b329ef3d5347c277b391d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=83=A1=E5=BF=97=E6=96=87?= <921158807@qq.com> Date: Wed, 28 Sep 2022 12:55:22 +0800 Subject: [PATCH 2/2] 0 --- .../20220921 \345\207\275\346\225\260.md" | 98 ++++++++++++ ...30\345\202\250\350\277\207\347\250\213.md" | 139 ++++++++++++++++++ ...27\350\247\246\345\217\221\345\231\250.md" | 139 ++++++++++++++++++ 3 files changed, 376 insertions(+) create mode 100644 "16\350\203\241\345\277\227\346\226\207/\347\254\224\350\256\260/20220921 \345\207\275\346\225\260.md" create mode 100644 "16\350\203\241\345\277\227\346\226\207/\347\254\224\350\256\260/20220926 \345\255\230\345\202\250\350\277\207\347\250\213.md" create mode 100644 "16\350\203\241\345\277\227\346\226\207/\347\254\224\350\256\260/20220927\350\247\246\345\217\221\345\231\250.md" diff --git "a/16\350\203\241\345\277\227\346\226\207/\347\254\224\350\256\260/20220921 \345\207\275\346\225\260.md" "b/16\350\203\241\345\277\227\346\226\207/\347\254\224\350\256\260/20220921 \345\207\275\346\225\260.md" new file mode 100644 index 0000000..6ccfc79 --- /dev/null +++ "b/16\350\203\241\345\277\227\346\226\207/\347\254\224\350\256\260/20220921 \345\207\275\346\225\260.md" @@ -0,0 +1,98 @@ +### 一、函数 + +#### 1,优点 + +* 进行模块化程序设计 +* 加快执行速度 +* 减少网络流量 + +#### 2,分类 + +##### (1)标量值函数(Scalar Function) + +* 返回一个在returns字句中定义的确定类型的标量值, + +##### (2)内嵌表值函数(Inline Function) + +* 返回的数据类型是由选择结果构成记录集的table函数 + +##### (3)多语句表值函数(Multi-Statement Function) + +* 标量函数和内联表值函数相联系而成的结合体,返回值也是一张表 + +##### (4)内嵌表值函数和多语句表值函数都返回表,**二者不同之处在于:** + +1. 内嵌表值函数没有函数主体,返回的表是单个SELECT语句的结果集 +2. 多语句表值函数返回值是一个表,但它和标量函数一样有一个用BEGIN-END 语句括起来的函数体,返回值的表中的数据是由函数体中的语句插入的 + + + +#### 3、适用范围 + +- 只查询,不修改数据库的状态(修改、删除表中记录等) + +- 结果集需要通过递归等方法得到时,可以使用函数,函数比较灵活 + +- 结果集需要直接被引用时,可以使用函数。需要对结果集进行再加工(指放在select语句中等),可以使用函数,函数可以嵌在select等sql语句中。 + + + +#### 4、标量值函数(返回指定值) + +```sql +go +create function function_name(@参数名 数据类型) +returns + 返回值的数据类型 +as +begin + 操作 + return --返回一个指定的值 +end +go +--查看函数 +select dbo.函数名(值) +``` + + + +#### 5、内嵌表值函数(返回一个表) + +```sql +create function 函数名 (标量参数 标量参数类型) +returns table +as +begin + return (select查询语句) +end + +select * from dbo.函数名('') +``` + + + +#### 6、多语句表值函数 + +* 返回值的表中的数据是由函数体中的语句插入的 + +```SQL +go +create function 函数名 (标量参数 参数类型) +returns @表名 table(表列名1 数据类型1,表列名2 数据类型2,表列名3 数据类型3...) +as +begin + insert into @表名 values(用户自定义为表中添加数据) from 表名 where... + return +end +go + +--查看函数 +select * from dbo.函数名() +``` + + + +#### 7,删除函数(drop) + +```sql +drop function 函数名 +``` \ No newline at end of file diff --git "a/16\350\203\241\345\277\227\346\226\207/\347\254\224\350\256\260/20220926 \345\255\230\345\202\250\350\277\207\347\250\213.md" "b/16\350\203\241\345\277\227\346\226\207/\347\254\224\350\256\260/20220926 \345\255\230\345\202\250\350\277\207\347\250\213.md" new file mode 100644 index 0000000..a6b5351 --- /dev/null +++ "b/16\350\203\241\345\277\227\346\226\207/\347\254\224\350\256\260/20220926 \345\255\230\345\202\250\350\277\207\347\250\213.md" @@ -0,0 +1,139 @@ +### 一,存储过程 + +#### 1,概念 + +* 是一组为了完成特定功能的T-SQL语句集合,存储在数据库内,可以有用户的应用程序,通过指定存储过程名称及相关参数来执行 + +#### 2,分类 + +* **系统存储过程**:用来管理SQL Server与显示有关数据库和用户的信息的存储过程 + +* **自定义存储过程**:用户在SQL Server中通过采用SQL语句创建存储过程 + + (1)T-SQL存储过程;保存的T-SQL语句集合,可以接受和返回用户提供的参数 + + (2)CLR存储过程;对Microsoft.NET Framework公共语言运行时方法的引用,可以接受和返回用户提供的 参数。在.NET Framework程序集中作为类的公共静态方法实现 + +* **扩展存储过程**:通过编程语言(例如C)创建外部例程,并将这个例程在SQL Server中作为存储过程使用 + + + +#### 3,优点 + +* 存储过程可以**嵌套使用,支持代码重用** +* 存储过程可以接受与使用参数动态执行其中的SQL语句 +* 存储过程比一般的SQL语句**执行速度快** +* **模块化的程序设计,实现代码多次调用**。存储过程只需创建一次,并存储在数据库中,在以后的使用中,便可重复调用,不需要每次都重新编写 +* 存储过程可以**减少网络通讯流量**,可以调用需要若干行T-SQL 代码的操作,而不需要通过网络传送这些代码。 +* + 可以作为**安全机制**。对用户只授予执行存储过程的权限,而不授予用户直接访问相应表的权限,这样既保证了用户操作数据库中的数据,又限制用户访问相应的表,保证了数据的安全 + + + +#### 4,创建存储过程(==procedure==(可简写为proc)) + +```sql +go +create proc Proc_自定义存储名称 +@Proc_Son int +as + (操作) +go +``` + + + +#### 5,执行存储过程(==exec==) + +```sql +--无参 +exec proc_存储过程名称 + +--带参 +exec proc_存储过程名称(参数1),(参数2),(参数3)... + +--带参带返回值 +declare @变量 +exec @变量 = proc_存储过程名称(参数1),(参数2)... + +--有输入参数,有输出参数的存储过程 +declare @变量 +exec proc_存储过程名称(参数1),(参数2),@变量 output + +--一个变量同时具备输入输出功能 +declare @变量 数据类型 = 值 +exec proc_存储过程名称(参数1),(参数2),@变量 output +``` + + + +#### 6,删除存储过程(==drop==) + +``` +drop proc Proc_存储过程名称 +``` + + + +#### 7,有输入参数,没有输出参数,但是有返回值的存储过程(返回值必须整数) + +```sql +create proc 存储过程名称 +@变量1 数据类型 +@变量2 数据类型 +... +as + (操作) + return 整数 +go +``` + + + +#### 8,有输入参数,有输出参数的存储过程 & 一个变量具备同时输入输出参数的存储过程 + +```sql +create proc <存储过程名称> +@变量1 数据类型 output +@变量2 数据类型 output +... +as + (操作) + return 整数 +go +``` + + + +#### 9,常见的系统存储过程 + +| 存储名称 | 详解 | +| :------------------: | :----------------------------------------------------------: | +| 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 | 显示默认值,未加密的存储过程、用户定义的存储过程、触发器或视图的实际文本 | + + + +#### 10,存储过程与函数的区别 + +1.储存过程可以有返回值也可以无返回值。函数必须有返回值。 + +2.存储过程的实现比较复杂,而函数的实现比较有针对性。 + +3.储存过程可以输入输出参数,而函数只可以输入参数。 + +4.过程允许在其中选择以及DML语句,而函数只可以在其中select语句。 + +5.可以在存储过程中调用函数,不可以在函数中调用存储过程。 + +6.函数可以作为条件在语句中使用,但是存储过程不可以。 \ No newline at end of file diff --git "a/16\350\203\241\345\277\227\346\226\207/\347\254\224\350\256\260/20220927\350\247\246\345\217\221\345\231\250.md" "b/16\350\203\241\345\277\227\346\226\207/\347\254\224\350\256\260/20220927\350\247\246\345\217\221\345\231\250.md" new file mode 100644 index 0000000..a6b5351 --- /dev/null +++ "b/16\350\203\241\345\277\227\346\226\207/\347\254\224\350\256\260/20220927\350\247\246\345\217\221\345\231\250.md" @@ -0,0 +1,139 @@ +### 一,存储过程 + +#### 1,概念 + +* 是一组为了完成特定功能的T-SQL语句集合,存储在数据库内,可以有用户的应用程序,通过指定存储过程名称及相关参数来执行 + +#### 2,分类 + +* **系统存储过程**:用来管理SQL Server与显示有关数据库和用户的信息的存储过程 + +* **自定义存储过程**:用户在SQL Server中通过采用SQL语句创建存储过程 + + (1)T-SQL存储过程;保存的T-SQL语句集合,可以接受和返回用户提供的参数 + + (2)CLR存储过程;对Microsoft.NET Framework公共语言运行时方法的引用,可以接受和返回用户提供的 参数。在.NET Framework程序集中作为类的公共静态方法实现 + +* **扩展存储过程**:通过编程语言(例如C)创建外部例程,并将这个例程在SQL Server中作为存储过程使用 + + + +#### 3,优点 + +* 存储过程可以**嵌套使用,支持代码重用** +* 存储过程可以接受与使用参数动态执行其中的SQL语句 +* 存储过程比一般的SQL语句**执行速度快** +* **模块化的程序设计,实现代码多次调用**。存储过程只需创建一次,并存储在数据库中,在以后的使用中,便可重复调用,不需要每次都重新编写 +* 存储过程可以**减少网络通讯流量**,可以调用需要若干行T-SQL 代码的操作,而不需要通过网络传送这些代码。 +* + 可以作为**安全机制**。对用户只授予执行存储过程的权限,而不授予用户直接访问相应表的权限,这样既保证了用户操作数据库中的数据,又限制用户访问相应的表,保证了数据的安全 + + + +#### 4,创建存储过程(==procedure==(可简写为proc)) + +```sql +go +create proc Proc_自定义存储名称 +@Proc_Son int +as + (操作) +go +``` + + + +#### 5,执行存储过程(==exec==) + +```sql +--无参 +exec proc_存储过程名称 + +--带参 +exec proc_存储过程名称(参数1),(参数2),(参数3)... + +--带参带返回值 +declare @变量 +exec @变量 = proc_存储过程名称(参数1),(参数2)... + +--有输入参数,有输出参数的存储过程 +declare @变量 +exec proc_存储过程名称(参数1),(参数2),@变量 output + +--一个变量同时具备输入输出功能 +declare @变量 数据类型 = 值 +exec proc_存储过程名称(参数1),(参数2),@变量 output +``` + + + +#### 6,删除存储过程(==drop==) + +``` +drop proc Proc_存储过程名称 +``` + + + +#### 7,有输入参数,没有输出参数,但是有返回值的存储过程(返回值必须整数) + +```sql +create proc 存储过程名称 +@变量1 数据类型 +@变量2 数据类型 +... +as + (操作) + return 整数 +go +``` + + + +#### 8,有输入参数,有输出参数的存储过程 & 一个变量具备同时输入输出参数的存储过程 + +```sql +create proc <存储过程名称> +@变量1 数据类型 output +@变量2 数据类型 output +... +as + (操作) + return 整数 +go +``` + + + +#### 9,常见的系统存储过程 + +| 存储名称 | 详解 | +| :------------------: | :----------------------------------------------------------: | +| 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 | 显示默认值,未加密的存储过程、用户定义的存储过程、触发器或视图的实际文本 | + + + +#### 10,存储过程与函数的区别 + +1.储存过程可以有返回值也可以无返回值。函数必须有返回值。 + +2.存储过程的实现比较复杂,而函数的实现比较有针对性。 + +3.储存过程可以输入输出参数,而函数只可以输入参数。 + +4.过程允许在其中选择以及DML语句,而函数只可以在其中select语句。 + +5.可以在存储过程中调用函数,不可以在函数中调用存储过程。 + +6.函数可以作为条件在语句中使用,但是存储过程不可以。 \ No newline at end of file -- Gitee