1)标量函数:对单一值的操作,返回单一值。有begin end包括起来。
2)内嵌表值函数:相当于参数化的视图,返回的是一个表。没有begin end包括起来。
3)多声明表值函数:返回的是一个表,有begin end包括起来。返回的表数据由函数体中的语句插入的,可以多次查询使用,甚至可以多次筛选与合并,弥补了内嵌函数的不足。
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语句)
也称为多语句表值函数。返回的是一个表,可定义表名、表的结构。是标量函数与内嵌标值函数的结合,弥补了内嵌标值函数的不足。
- create function [dbo].函数名(传入的参数 参数类型 ,传入的参数 参数类型)
- returns @表名 table ——表结构定义
- as
- begin
- --函数体
- Insert into @表名(要插入的列,要插入的列)select 查询结果
- return
- end
1)函数所有者定义时写了,调用时就必须写,一般是dbo
2)return后面什么都不跟
3)函数一般做查询使用,不能数据修改。
4)如果能用内嵌表值函数能够满足,就不要用多声明表值函数。
应用:比较灵活,可以在select中使用;被直接应用;通过递归方法得到使用函数。
一系列T-SQL语句构成列事务操作的逻辑工作单元。事务是为了完成一定的业务逻辑,将操作封装起来,与其他语句形成边界,形成相对独立的工作定义。
通过事务可以提高数据的安全性;增强了数据的处理效率;维护数据库的完整性。
处理过程中,出现了某种错误或系统伺机或断电,数据并没有保存到数据库。
两种:1)所有操作并未发生任何错误,事务就会全部被提交;
2)如果有某一个操作发生错误或故障,最终所有操作都会全部回滚到最初状态。
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)如何调用事务:一般放在存储过程中
多个用户对用一条数据进行访问,
1)丢失或覆盖更新:一个事务在不知道其他事务存在的情况下,对数据进行修改,而造成的数据丢失。
2)脏读:一个事务读取了其他事务并未提交的更新。
3)不可重复读:当多个事务访问同一条数据,每次读取的数据不同,称为不可重复读。
4)幻象读:第一次读取的数据行与第二次读取的不一致,第二次读取到的数据是第一次读取时不存在的。
1)设置事务隔离级别:事务接受的不一致数据访问级别
隔离级别太低容易造成并发问题;
隔离级别设置高可有效降低并发问题
2)read committed 默认的级别(常用)——可以避免脏读问题,会产生不可重复读和幻象读。
3)read uncommitted 相当于0级——4种并发问题都可能产生。
4)repeatable read ——可以避免脏读,不可重复读,会产生幻象读。
5)serializable 最高级别——可以有效避免4种并发问题。
set tran isolation level 隔离级别