2016年NIIT认证面试题精选
什么是事务?四大事务特性是什么?(ACID)
事务是单个的工作单元。如果某一事务成功,则在该事务中进行的所有数据修改均会提交,成为数据库中的永久组成部分。如果事务遇到错误且必须取消或回滚,则所有数据修改均被清除。
举个例子,比如你去银行转帐就是一个事务。转帐可以简单的分为两个步骤,一是把钱从你的帐户中扣除,二是把钱存到你指定转帐的帐户中。这两个步骤就是一个事务,必须全部执行,或是全部不执行。如果从你帐户扣钱成功,但是转帐失败,那么你转帐的钱就没有了;如果是扣钱失败了,但是转帐成功了,那银行就亏了。
事务是作为单个逻辑工作单元执行的一系列操作。一个逻辑工作单元必须有四个属性,称为原子性、一致性、隔离性和持久性 (ACID) 属性,只有这样才能成为一个事务。
原子性:事务必须是原子工作单元;对于其数据修改,要么全都执行,要么全都不执行。
一致性:事务在完成时,必须使所有的数据都保持一致状态。在相关数据库中,所有规则都必须应用于事务的修改,以保持所有数据的完整性。事务结束时,所有的内部数据结构(如 B 树索引或双向链表)都必须是正确的'。
隔离:由并发事务所做的修改必须与任何其他并发事务所做的修改隔离。事务识别数据时数据所处的状态,要么是另一并发事务修改它之前的状态,要么是第二个事务修改它之后的状态,事务不会识别中间状态的数据。这称为可串行性,因为它能够重新装载起始数据,并且重播一系列事务,以使数据结束时的状态与原始事务执行的状态相同。
持久性:事务完成之后,它对于系统的影响是永久性的。该修改即使出现系统故障也将一直保持。
SQL Server 以下列事务模式运行。
自动提交事务:每条单独的语句都是一个事务。
显式事务:每个事务均以 BEGIN TRANSACTION 语句显式开始,以 COMMIT 或 ROLLBACK 语句显式结束。
隐式事务:在前一个事务完成时新事务隐式启动,但每个事务仍以 COMMIT 或 ROLLBACK 语句显式完成。
批处理级事务:只能应用于多个活动结果集 (MARS),在 MARS 会话中启动的 Transact-SQL 显式或隐式事务变为批处理级事务。当批处理完成时没有提交或回滚的批处理级事务自动由 SQL Server 进行回滚。
Sql Server中有三种使用事务的方法,分别是Sql语句,SqlTransaction和TransactionScope,下面一节将分别介绍这三种事务的使用方法。htt
事务(TRANSACTION)是作为单个逻辑工作单元执行的一系列操作
q 这些操作作为一个整体一起向系统提交,要么都执行、要么都不执行
q 事务是一个不可分割的工作逻辑单元
转帐过程就是一个事务。
它需要两条UPDATE语句来完成,这两条语句是一个整体,如果其中任一条出现错误,则整个转帐业务也应取消,两个帐户中的余额应恢复到原来的数据,从而确保转帐前和转帐后的余额不变,即都是1001元。
事务的特性
事务必须具备以下四个属性,简称ACID属性:
•q原子性(Atomicity):事务是一个完整的操作。事务的各步操作是不可分的(原子的);要么都执行,要么都不执行
•q一致性(Consistency):当事务完成时,数据必须处于一致状态
•q隔离性(Isolation):对数据进行修改的所有并发事务是彼此隔离的,这表明事务必须是独立的,它不应以任何方式依赖于或影响其他事务
•q永久性(Durability):事务完成后,它对数据库的修改被永久保持,事务日志能够保持事务的永久性
如何创建事务
q T-SQL使用下列语句来管理事务:
q 开始事务:BEGIN TRANSACTION
q 提交事务:COMMIT TRANSACTION
q 回滚(撤销)事务:ROLLBACK TRANSACTION
一旦事务提交或回滚,则事务结束。
q 判断某条语句执行是否出错:
q 使用全局变量@@ERROR;
q @@ERROR只能判断当前一条T-SQL语句执行是否有错,为了判断事务中所有T-SQL语句是否有错,我们需要对错误进行累计;
如: SET @errorSum=@errorSum+@@error
了解事务的分类:
q 显示事务:用BEGIN TRANSACTION明确指定事务的开始,这是最常用的事务类型
q 隐性事务:通过设置SET IMPLICIT_TRANSACTIONS ON 语句,将隐性事务模式设置为打开,下一个语句自动启动一个新事务。当该事务完成时,再下一个 T-SQL 语句又将启动一个新事务
q 自动提交事务:这是 SQL Server 的默认模式,它将每条单独的 T-SQL 语句视为一个事务,如果成功执行,则自动提交;如果错误,则自动回滚
q 使用事务解决银行转帐问题
……关键语句讲解………
BEGIN TRANSACTION
/*--定义变量,用于累计事务执行过程中的错误--*/
DECLARE @errorSum INT
SET @errorSum=0 --初始化为0,即无错误
/*--转帐:张三的帐户少1000元,李四的帐户多1000元*/
UPDATE bank SET currentMoney=currentMoney-1000
WHERE customerName='张三'
SET @errorSum=@errorSum+@@error
UPDATE bank SET currentMoney=currentMoney+1000
WHERE customerName='李四'
SET @errorSum=@errorSum+@@error --累计是否有错误
IF @errorSum<>0 --如果有错误
BEGIN
print '交易失败,回滚事务'
ROLLBACK TRANSACTION
END
ELSE
BEGIN
print '交易成功,提交事务,写入硬盘,永久的保存'
COMMIT TRANSACTION
END
Go
print '查看转帐事务后的余额'
SELECT * FROM bank
GO
相關文章
-
NIIT认证面试真题及答案2017年
教材内容与国际软件开发趋势接轨,平均18个月更新一次。NIIT与微软有战略联盟,课程涵盖各类软件开发知识,涉及微软认证及Oracle认证等技术的主要内容。下面是小编整理的关于NIIT认证面试真题及答案,欢迎大家参考!1. 如果要 -
2016年NIIT认证模拟试题
D1. 考察以下代码片段:import .*;public interface HelloServer extends Remote{String DisplayHello();}此文件将成功地编译?1) 此文件将不编译,由于方法DisplayHello()不引发RemoteException。2) 在编译时,将出现异常C -
2016年NIIT认证预测试题
C1 jdbc中,那个类可以执行一个存储过程?1) PreparedStatement2) Statement3) CallableStatement4) ConnectionB2 以下那一个不是Page命令中的有效属性?1) import2) export3) session4) errorPageC3 以下方法中哪一个把 -
2016年NIIT认证全真模拟试题
对机械行业有所了解的人,会对机械设计工程师感兴趣,那么机械设计工程师岗位职责是什么呢?下面乔布 简历 的小编给大家 机械设计工程师岗位职责 :机械设计工程师主要负责机械设备的日常巡检工作,.配合设备管理工程师进行机 -
2016年Niit认证mvc1试题
1、判断以下代码的输出:namespace OOP{class Program{public void Change(out int x){x = 100;}static void Main(string[] args){Program P = new Program();int x = 10;ge(out x);eLine("x={0}",x);}}}A.x=10 B.x=10 -
2016年NIIT认证模拟练习题
4A1) 在RMI应用中,你不使用UnicastRemoteObject类。假定代替UnicastRemoteObject你扩展了另一个类,为使它成为RemoteObject类你将在实现类中加入什么代码行?1. 在实现类的构造符中,你将加入以下代码行:rtObject();2. 在实 -
NIIT认证面试真题及答案
线程总是由操作系统占有和管理,一个新线程的创建和启动只能由操作系统来负责管理。故不能直接调用该线程的run方法,若如此,则不会创建新的`线程和启动该线程,而是和其它类对象一样,那么应该怎样正确启动线程呢?调用线程对 -
NIIT认证数据库面试题及答案
1. 存储过程和函数的区别存储过程是用户定义的一系列sql语句的集合,涉及特定表或其它对象的任务,用户可以调用存储过程,而函数通常是数据库已定义的方法,它接收参数并返回某种类型的值并且不涉及特定用户表。 2. -
2016NIIT精选试题
1)CJ2 EE应用文件的扩展是什么?1. 2. 3. 4. 2)C由于使用J2EE来执行servlet,可使用什么缺省端口号?1. 90902. 80803. 80004. 70003)B Dave用EJB开发了一个银行应用.在他的应用中,他用实体beans来表示他的数据库中业务 -
2016年Linux认证精选试题及答案
1.关于硬链接的描述正确的(BE)。A 跨文件系统B不可以跨文件系统C 为链接文件创建新的i节点D可以做目录的连接E链接文件的i节点同被链接文件的i节点2.在网站发布用户wang的个人网页时,需要创建用户网页目录,假定用户网页