自定义完整性。(事务)
事务的四个特性:
原子性 : 事务中SQL语句是一个整体, 不可分离,要么都执行、要么都不执行
一致性 : 事务前后数据保持一致
隔离性 : 事务中不允许其他事务介入
永久性 : 事务执行之后对数据表的修改是永久的
Expectation:
保证数据被操作后,前后一致。
…这样说不易理解…来举个栗子,银行转账
假设有 张三有10000元和李四有5000元,
check约束张三的钱必须大于0元
现要张三转10000元给李四
sql代码如下
update trans set mon = mon - 10000 where id = '张三'
update trans set mon = mon + 10000 where id = '李四'
insert into card values ('张三',10000,'支出')
insert into card values ('李四',10000,'收入')
只看check约束 ,显然第一条语句不能执行,报错,而后三条可执行,那么,张三没能转10000,
这一万该银行背了…
为了解决上述问题,有一个事务处理机制,来保证自定义完整性,即要转账就要成功,
要不就全部失败…
上代码
begin tran --事务declare @i intupdate trans set mon = mon - 10000 where id = '张三'set @i = @i + @@errror --记录上一行的错误update trans set mon = mon + 10000 where id = '李四'set @i = @i + @@errrorinsert into card values ('张三',10000,'支出')set @i = @i + @@errrorinsert into card values ('李四',10000,'收入')set @i = @i + @@errrorif @i <> 0 --有错误 rollback tran --撤回代码,不执行elsecommint tran --0 个错误 ,执行sql