数据库Sql Server操作——视图与事务

目录

三.视图

1.为什么需要视图

 2.什么是视图

3.视图的格式

4.视图的优点

5.视图的缺点

6.注意的问题

四.事务

1.初学者必须要掌握的三个问题

(1)事务是用来研究什么的

(2)事务和线程的关系

(3)事务和第三方插件的关系

2.什么是事务

 3.如何创建事务

4.事务三种运行模式

5.总结事务的四大特性

6.注意问题

7.给初学者的一点建议


三.视图

1.为什么需要视图

示例:求出平均工资最高的部门的编号和部门平均工资(不使用top,top不可移植)。

 简化查询——避免了代码的冗余与属性大量重复的SQL语句

 2.什么是视图

从代码上看,视图是一个SELECT语句;

从逻辑上看,视图被当做一个虚拟表看待。

3.视图的格式

CREATE VIEW 视图的名字
AS
    --SELECT的前面不能添加BEGIN
    SELECT语句
    --SELECT的后面不能添加END

4.视图的优点

  • 简化查询
  • 增加数据的保密性

对emp表中的工资和入职时间进行隐藏,使用户只能对虚拟表进行各种操作。

(根据具体情况,对虚拟表的增删改查各种操作可能会影响具体表)

5.视图的缺点

  • 增加了数据库维护的成本;
  • 视图只是简化了查询,但是并不能加快查询的速度,这也是视图使用不足的地方。

例如:若想删除emp表中的ename属性,则包含ename的虚拟表不会随之删除ename,且运行会报错。

6.注意的问题

  • 创建视图的SELECT语句必须为所有的计算列指定别名;

  • 视图不是物理表,是虚拟表;
  • 不建议通过视图更新所依附的原始表的数据或结果。 

四.事务

1.初学者必须要掌握的三个问题

(1)事务是用来研究什么的

  • 事务可以保证避免数据处于一种不合理的中间状态;
  • 利用事务可以实现多个用户对共享资源的同时访问。

例如:转账

A 给 B转账,只能是 A 的钱减少并且 B 的钱增多了,或者转账失败,其他情况都是不合理的。

(2)事务和线程的关系

  • 事务也是通过锁来解决很多问题的;
  • 线程同步就是通过锁来解决的。

(3)事务和第三方插件的关系

  • 直接使用事务库技术难度很大,很多人是借助第三方插件来实现。
  • 第三方插件要想完成预期的功能,一般必须借助数据库中的事务机制。

2.什么是事务

一系列操作要么全部执行成功,要么全部执行失败,这就是事务。

 3.如何创建事务

4.事务三种运行模式

5.总结事务的四大特性

事务必须具备以下四个属性,简称ACID属性 

  • 原子性:事务是一个完整的操作。事务的各步操作是不可分的(原子的);要么都执行,要么都不执行。
  • 一致性:当事务完成时,数据必须处于一致状态,要么处于开始状态要么处于结束状态不允许出现中间状态。
  • 隔离性:指当前的事务与其他未完成的事务是隔离的。在不同的隔离级别下,事务的读取操作,可以得到的结果是不同的。
  • 持久性:事务完成后,它对数据库的修改被永久保持,事务日志能够保持事务的永久性。 

6.注意问题

不能在 Sql Server 2000 中单独使用 commit;        rollback; 语句

delete from dept2 where deptno = 50;
commit	--error
Rollback -- error

7.给初学者的一点建议

事务重在理解概念;

如果不是数据库dba,初学者对事物的语法细节不需要深究。 

8.例子

create table bank
(
	customerEname nvarchar(200),
	currentMoney money check(currentMoney >= 1)
)

insert into bank values('张三', 1000);
insert into bank values('李四',1);

select * from bank;

 

若把张三的1000元打入李四的账户中,但是违背了currentMoney >= 1的约束。

update bank set currentMoney = currentMoney -1000 where customerEname = '张三';--error
update bank set currentMoney = currentMoney +1000 where customerEname = '李四';

结果: 

所以用事务实现:

begin transaction
declare @errorSum int
set @errorSum = 0
update bank set currentMoney = currentMoney - 1000
	where customerEname = '张三'
set @errorSum = @errorSum + @@ERROR
update bank set currentMoney = currentMoney + 1000
	where customerEname = '李四'
set @errorSum = @errorSum + @@ERROR
if (@errorSum <> 0)
	begin
		print '转账失败'
		rollback transaction
	end

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值