sql server 的T-SQL 学习笔记(九)
来源:互联网 发布:webrtc 源码介绍 编辑:程序博客网 时间:2024/06/06 00:00
/******************* 事务 索引 视图 ****************************/-- 理解什么是事务 怎样创建事务 -- eg:使用银行卡进行消费时候 -- 事务的特性 -- ACID -- 原子性(atomicity):事务中各元素不可分隔,全部执行成功或者撤销所有的操作 -- 一致性(consistency):事务完成后事务保持一致的状态 -- 隔离性(isoiation):事务是相对独立的,对某数据进行修改时,其他事物不变 -- 持久性(durability):事务完成后对系统的影响是永久性的 -- 事务隔离性级别 -- 未提交读(read uncommited)(脏读):事务之间没有隔离,能够读取其他事物正在修改但尚未提交的数据, -- 该隔离级别无法确保数据的正确性 -- 已提交读(read commited):SQL server 默认的隔离级别,能够确保其他事物不能读取当前的事务操作的数据 -- 重复读-- 使用事务-- 创建索引-- 创建和使用视图-- 事务分类 -- 显示事务: begin transaction 语句明确指定事务开始(一条或多条) -- 隐式事务 : set implicit_transactions on -- 自动提交事务 : sql server 默认的事务模式 (默认每一条SQL语句都是事务)-- 事务管理 -- 开始 bengin transaction -- 提交事务 commit transaction -- 回滚事务 rollback transaction-- 语句执行是否成功 -- @@error 全局变量 -- @@error是判断当前执行SQL语句是否有错误,为了判断事务中所有SQL语句是否有错误 -- 定义局部变量保存事务当中每一条SQL语句执行的错误@@error 最后再判断@@error 从而确定事务是否成功-- 转账 -- 给大乔(2,6225972472383739) 转账 use BANK select * from ACCOUNT select * from ALL_PURPOSE_CARD select * from ALL_CARD_EXCHANGE go -- 开始事务 begin transaction -- 开始事务 declare @tError int = 0 -- 定义局部变量保存SQL语句执行错误 declare @money int = 200 -- 转账金额 declare @card_id int = 5 -- 转账: 添加交易记录 更新收账人金额 减少转账人金额 insert into TRANSFER values ('6225972472383739','6225678934623552',@money,GETDATE()) set @tError = @tError + @@ERROR -- 更新错误信息 select * from TRANSFER -- card_id 5 号 insert ALL_CARD_EXCHANGE(CARD_ID,EXTRANSFER,BALANCE,EXTIME,EXADDRESS) values (@card_id,@money,1000-@money,GETDATE(),'银行交易') set @tError = @tError + @@ERROR insert ALL_CARD_EXCHANGE(CARD_ID,EXTRANSFER,BALANCE,EXTIME,EXADDRESS) values (2,@money,6000+@money,GETDATE(),'银行交易') set @tError = @tError + @@ERROR select * from ALL_CARD_EXCHANGE -- 更新银行账户记录 update ALL_PURPOSE_CARD set BALANCE -= @money ,LAST_USED_DATE = GETDATE() where CARD_ID = 5 set @tError = @tError + @@ERROR update ALL_PURPOSE_CARD set BALANCE += @money ,LAST_USED_DATE = GETDATE() where CARD_ID = 2 set @tError = @tError + @@ERROR select * from ALL_PURPOSE_CARD --判断是否执行成功 if(@tError <> 0) begin print '交易失败,事务回滚' rollback transaction end else begin print '交易成功,事务提交' commit transaction end/******************** 索引 ****************************/ -- 索引是表或者视图关联的硬盘上的结构,可以加快从表或者视图中查找数据的速度 -- 唯一索引 : 不允许两行相同的索引值 -- 聚集索引 -- 非聚集索引 -- 创建索引 -- 判断索引是否存在 存在就删除 if exists (select * from sys.indexes where name = 'ix_card_no') drop index ALL_PURPOSE_CARD.ix_card_no go -- 创建索引 create nonclustered index ix_card_no on ALL_PURPOSE_CARD(CARD_NO) with fillfactor = 1 go -- 查询索引 select * from sys.indexes where name = 'ix_card_no' -- 使用索引 显示使用索引进行查询 select * from ALL_PURPOSE_CARD with (index = ix_card_no) /**************** 视图 *********************/ -- 视图 类似于VO --使用代码创建视图 if exists (select * from sys.objects where name = 'view_account') drop view view_account go create view view_account as select ac.ACCOUNT_NAME, ap.CARD_NO, ap.BALANCE, ap.LAST_USED_DATE from ACCOUNT as ac inner join ALL_PURPOSE_CARD as ap on ac.ACCOUNT_ID = ap.ACCOUNT_ID where ap.BALANCE < 10000 go -- 使用视图 select * from view_account update view_account set ACCOUNT_NAME = '陆逊' where ACCOUNT_NAME = '陆逊1' /*************** 课程总结 ******************/ /** 事务具有ACID4个特性:原子性、一致性、隔离性、持久性 事务可以分为3类:显示事务、隐式事务、自动提交事务 T-SQL管理事务使用3条语句: BEGIN TRANSACTION COMMIT TRANSACTION ROLLBACK TRANSACTION 建立索引有助于快速检索数据。索引分为:唯一索引、主键索引、聚集索引、非聚集索引。 聚集索引用于决定表中数据的物理存放顺序,所以一个表只能有一个聚集索引;非聚集索引用于决定表的逻辑顺序,一个表可以有多个非聚集索引。 视图是查看表中数据的方法,它是一种虚拟表,是作为执行查询结果而创建的;视图充当筛选器,可以按要求对表数据进行行和列的筛选。 */
阅读全文
0 0
- sql server 的T-SQL 学习笔记(九)
- sql server 的T-SQL 学习笔记(一)
- sql server 的T-SQL 学习笔记(三)
- sql server 的T-SQL 学习笔记(四)
- sql server 的T-SQL 学习笔记(五)
- sql server 的T-SQL 学习笔记(六)
- sql server 的T-SQL 学习笔记(七)
- sql server 的T-SQL 学习笔记(八)
- SQL Server 2005 T-SQL学习笔记:TOP的增强
- SQL Server 2005 T-SQL 学习笔记:排名函数
- SQL Server 2005 T-SQL 学习笔记:Try Catch
- SQL Server 2005 T-SQL学习笔记:PIVOT和UNPIVOT
- SQL Server 2005 T-SQL学习笔记:CTE
- 【SQL Server学习笔记】T-SQL中的流程控制、游标
- SQL Server 全文索引查询T-SQL学习笔记
- 【SQL Server学习笔记】8:T-SQL部分基本语法
- Sql server T-SQL (Transact-SQL)学习
- sql server 的T-SQL 学习笔记(二)--- 解决union select插入多行数据过滤数据(union all)
- UVA1572 Self_Assembly-拓扑排序
- TextView长按复制-粘贴
- 用“Keras”11行代码构建CNN
- 文章标题
- 需求调研问卷的编写(2)
- sql server 的T-SQL 学习笔记(九)
- android中的无线通信蓝牙
- C/C++中的static关键字的易错点
- exercise5
- C# ASP.NET 解决方案开发微信公众号
- Discuz手机触屏版的帖子中图片无法放大查看
- spring mvc 给Controller添加事务
- Tomcat启动时加载数据到缓存--Web.xml里listener的加载顺序,优先初始化Spring IOC容器
- 关于android webview 的那些坑