一周速学SQL Server(第六天)

相关文章链接:

一周速学SQL Server(第一天)

一周速学SQL Server(第二天)

一周速学SQL Server(第三天)

一周速学SQL Server(第四天)

一周速学SQL Server(第五天)

一、自定义函数之标量函数

1.1、自定义函数三大类

1)标量函数:对单一值的操作,返回单一值。有begin end包括起来。

2)内嵌表值函数:相当于参数化的视图,返回的是一个表。没有begin end包括起来。

3)多声明表值函数:返回的是一个表,有begin end包括起来。返回的表数据由函数体中的语句插入的,可以多次查询使用,甚至可以多次筛选与合并,弥补了内嵌函数的不足。

1.2、标量函数

1)语法:

create function [dbo].函数名(传入的参数 参数类型 默认值)
returens 标量函数返回值类型
with encryption  ——若要加密需写此条代码
as
begin
    T-SQL语句(不可以有修改数据的操作)
    return表达式/值
end

 

注意:1)创建时,若指定了函数所有者,调用时必须指定函数所有者。

           2)调用时,若函数指定了默认值,在参数时使用defalut则使用默认值传参。若没有指定默认值,使用default则使用NULL传参。

           3)语法上returns后加返回值类型。

二、自定义函数之内嵌表值函数

1)概念:功能上相当于参数化的视图。返回的是一个表,没有begin end包裹。

2)语法

create function [dbo].函数名(传入的参数 参数类型 默认值)
returns table
as
return(select语句)

3)注意点

        returns后加返回值类型,只能返回table!

        as后面是没有beign end只能是return(select语句)

三、自定义函数之多声明表值函数 

3.1、概念

        也称为多语句表值函数。返回的是一个表,可定义表名、表的结构。是标量函数与内嵌标值函数的结合,弥补了内嵌标值函数的不足。

3.2、语法

create function [dbo].函数名(传入的参数 参数类型 ,传入的参数 参数类型)
returns @表名 table	——表结构定义
as
begin
    --函数体
    Insert into @表名(要插入的列,要插入的列)select 查询结果
    return
end

3.3、注意点 

1)函数所有者定义时写了,调用时就必须写,一般是dbo

2)return后面什么都不跟

3)函数一般做查询使用,不能数据修改。

4)如果能用内嵌表值函数能够满足,就不要用多声明表值函数。

3.4、应用

应用:比较灵活,可以在select中使用;被直接应用;通过递归方法得到使用函数。

四、事务的介绍

4.1、事务是什么?

        一系列T-SQL语句构成列事务操作的逻辑工作单元。事务是为了完成一定的业务逻辑,将操作封装起来,与其他语句形成边界,形成相对独立的工作定义。

        通过事务可以提高数据的安全性;增强了数据的处理效率;维护数据库的完整性。

4.2、事务应用:多个表操作

处理过程中,出现了某种错误或系统伺机或断电,数据并没有保存到数据库。

4.3、事务处理结果

两种:1)所有操作并未发生任何错误,事务就会全部被提交;

            2)如果有某一个操作发生错误或故障,最终所有操作都会全部回滚到最初状态。

4.4、事务的特性(4个特性ACID

1)原子性(Atomic):将事务可做一个工作单元,所有元素作为一个整体提交或回滚,各个元素是不可分割的。一个操作。

2)一致性(ConDemoltent):数据状态必须保存一致,以保证数据完好无损。

3)隔离性(Isolated):多个事务之间是彼此隔离的。表明事务的独立性。

4)持久性(Durability):事务提交后对数据库的更改是永久保存的,即使系统出现故障,也会保留,因为其真实的修改了数据库。

五、数据库事务创建

1)事务分为显示事务和隐式事务。

2)事务创建步骤:开启事务->提交事务->回滚事务

显示事务

隐式事务

开启事务

begin tran

set implicit_transactions on

提交事务

commit tran

commit tran

回滚事务

rollback

rollback

关闭事务

/

set implicit_transactions off

3)如何调用事务一般放在存储过程中

六、事务并发问题

6.1、如何发生的?

多个用户对用一条数据进行访问,

6.2、事务并发问题

1)丢失或覆盖更新:一个事务在不知道其他事务存在的情况下,对数据进行修改,而造成的数据丢失。

2)脏读:一个事务读取了其他事务并未提交的更新。

3)不可重复读:当多个事务访问同一条数据,每次读取的数据不同,称为不可重复读。

4)幻象读:第一次读取的数据行与第二次读取的不一致,第二次读取到的数据是第一次读取时不存在的。

6.3、解决

1)设置事务隔离级别:事务接受的不一致数据访问级别

隔离级别太低容易造成并发问题;

隔离级别设置高可有效降低并发问题

2)read committed 默认的级别(常用)——可以避免脏读问题,会产生不可重复读和幻象读。

3)read uncommitted 相当于0级——4种并发问题都可能产生。

4)repeatable read ——可以避免脏读,不可重复读,会产生幻象读。

5)serializable 最高级别——可以有效避免4种并发问题。

6.4、怎样设置隔离级别

set tran isolation level 隔离级别

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白天数糖晚上数羊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值