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