30分钟全面解析-SQL事务+隔离级别+阻塞+死锁

阅读目录

 以前总是追求新东西,发现基础才是最重要的,今年主要的目标是精通SQL查询和SQL性能优化。

 本系列主要是针对T-SQL的总结。

【T-SQL基础】01.单表查询-几道sql查询题

【T-SQL基础】02.联接查询

【T-SQL基础】03.子查询

【T-SQL基础】04.表表达式-上篇

【T-SQL基础】04.表表达式-下篇

【T-SQL基础】05.集合运算

【T-SQL基础】06.透视、逆透视、分组集

【T-SQL基础】07.数据修改

【T-SQL基础】08.事务和并发

【T-SQL基础】09.可编程对象

----------------------------------------------------------

【T-SQL进阶】01.好用的SQL TVP~~独家赠送[增-删-改-查]的例子

 ----------------------------------------------------------

【T-SQL性能调优】01.TempDB的使用和性能问题

【T-SQL性能调优】02.Transaction Log的使用和性能问题

【T-SQL性能调优】03.执行计划

【T-SQL性能调优】04.死锁分析

持续更新......欢迎关注我!

回到顶部

概述:

本篇主要是对SQL中事务和并发的详细讲解。

回到顶部

一、事务

1.什么是事务

为单个工作单元而执行的一系列操作。如查询、修改数据、修改数据定义。

2.语法

(1)显示定义事务的开始、提交

1

2

3

4

BEGIN TRAN

INSERT INTO b(t1) VALUES(1)

INSERT INTO b(t1) VALUES(2)

COMMIT TRAN

(2)隐式定义

如果不显示定义事务的边界,则SQL Server会默认把每个单独的语句作为一个事务,即在执行完每个语句之后就会自动提交事务。

3.事务的四个属性ACID

(1)原子性Atomicity

1.事务必须是原子工作单元。事务中进行的修改,要么全部执行,要么全都不执行;

2.在事务完成之前(提交指令被记录到事务日志之前),系统出现故障或重新启动,SQL Server将会撤销在事务中进行的所有修改;

3.事务在处理中遇到错误,SQL Server通常会自动回滚事务;

4.少数不太严重的错误不会引发事务的自动回滚,如主键冲突、锁超时等;

5.可以使用错误处理来捕获第4点提到的错误,并采取某种操作,如把错误记录在日志中,再回滚事务;

6.SELECT @@TRANCOUNT可用在代码的任何位置来判断当前使用SELECT @@TRANCOUNT的地方是否位于一个打开的事务当中,如果不在任何打开的事务范围内,则该函数返回0;如果在某个打开的事务返回范围内,则返回一个大于0的值。打开一个事务,@@TRANCOUNT=@@TRANCOUNT+1;提交一个事务,@@TRANCOUNT-1。

(2)一致性Consiitency

1.同时发生的事务在修改和查询数据时不发生冲突;

2.一致性取决于应用程序的需要。后面会讲到一致性级别,以及如何对一致性进行控制。

(3)隔离性Isolation

1.用于控制数据访问,确保事务只访问处于期望的一致性级别下的数据;

2.使用锁对各个事务之间正在修改和查询的数据进行隔离。

猜你喜欢

转载自my.oschina.net/u/3611008/blog/1805597