首页 > 其他 > 详细

事务、索引、视图

时间:2018-10-28 13:17:19      阅读:156      评论:0      收藏:0      [点我收藏+]

1、事务:何许东东也?有啥作用?怎么用?别急,看我的问题

小贵子和小英子是非常要好的朋友,最近小贵子交了女朋友,所以每个月的花销也大了,还没到月底呢,小贵子就没钱用了,身为好友的小英子肯定会义不容辞的借钱给小贵子啦。两人来到银行的ATM取款机面前。

Create table BankUser
(
        Id varchar(30) primary key,
        Name varchar(10),
        Balance decimal check(balance >= 1)
)
Insert bankuser values(‘10001’ , ‘小英子’ , 1000)
Insert bankuser values(‘10002’ , ‘小贵子’ , 2)

         小英子的账户里面还有1000块,这家伙很讲义气的,要么就不借,要借就全部借,所以直接就将1000块全部借给小贵子了,所以BankUser表出现了两次update操作,一次是让小英子的金额减少的,一次是让小贵子的金额增加的。请大家将两条update语句写出来。这两条语句肯定应该同时执行,因为这属于同一个业务。 执行完后,你会发现  ……出大事儿了  。出现什么问题了呢?为什么会酱紫?肿么解决捏????

 

 

当年在课堂上我没有答对。。。。后来终于找到了答案:

事务定义

事务(Transaction )是单个工作单元,SQL Server中允许用户创建视图,在同一原始数据表的基础上,为不同的用户选择不同的列。如果某一事务成功,则在该事务中进行的所有数据更改均会提交,成为数据库中的永久组成部分。如果事务遇到错误且必须取消或回滚,则所有数据更改均被清除。

事务是作为单个逻辑工作单元执行的一系列操作,一个逻辑工作单元必须有4个属性,即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、及持久性(Durability),这些特性通常简称为ACID。

1.原子性:事务是一个完整的操作.

2.一致性:当事务完成时,数据必须处于一致状态.

3.隔离性:对数据进行修改的所有并发事务是彼此隔离的,这表明事务必须是独立的.它不应以任何方式依赖于或影响其他事务.

4.持久性:事务的持久性指不管系统是否发生了故障,事务处理的结果都是永久地.

上代码:

--开始转账!
begin transaction  --开启事务
declare @errorsum int
  set @errorsum=0
update BankUser set Balance-=1000
  where ID=10001
  set @errorsum+=@@ERROR  --记录错误号
update BankUser set Balance+=1000
  where ID=10002
  set @errorsum+=@@ERROR  --记录错误号

--判断是否有错误
if(@errorsum>0)
begin
   rollback transaction --事务回滚,
end
else
begin
   commit transaction --事务提交,
end

2、索引:索引是什么呢?我们主要学习它的作用、弊端、什么情况下用、有哪些类型?它更多的是一些理论概念。

索引定义

  索引是SQL Server编排数据的内部方法,是检索表中数据的直接通道

  索引页是数据库中存储索引的数据页

  索引的作用是通过使用索引,提高数据库的检索速度,改善数据库性能

索引分类

  1、唯一索引

        唯一索引不允许两行具有相同的索引值

  2、主键索引

  主键索引是唯一索引的特殊类型

  3、聚集索引

     在聚集索引中,表中各行的物理顺序和键值的逻辑顺序相同

  4、非聚集索引

     非聚集索引建立在索引页上,当查询数据时可以从索引中找到记录存放的位置

 注意:在一张表中只能有一个聚集索引,但非聚集索引可以有多个,最多可以有254个,如果唯一一张表设置了主键,那么该列会自动提升为聚集索引,聚集索引和表中的物理记录顺序一致。

  5、复合索引

  在创建索引时,并不是只能对其中一列创建索引,与创建主键一样,可以将多个列组合作为索引,这种索引成为复合索引

  6、全文索引

     全文索引是一种特殊类型的基于标记的功能性索引

创建索引

create [unique] [clustered|nonclustered] index index_name
on table_name (column_name[,column_name]...)
[with fillfactor=x]

删除索引

drop index table_name.index_name

查看索引

--用系统存储过程sp_helpindex查看
sp_helpindex table_name
--用视图sys.indexes select * from sys.indexes

 

3、视图是什么呢?它可以封装select语句,这样我们就不用从前端程序发送太长的命令过来了,可以在一定程度上减少网络传输量,看到这,大家会想到我前几天经常提到的啥米呢?它还可以封装表,增加一定的安全性???为什么呢?

视图是种虚拟表,不能保存数据。

--创建视图
create view vw_Bank
as 
select * from Bank
--查询视图
select * from vw_Bank
--删除视图
drop View view_name

该问题是唐姐姐当年上课的预习题目,想记录下来作为复习。

事务、索引、视图

原文:https://www.cnblogs.com/dicot/p/9865190.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!