‘壹’ sql中事务有几种
有三种。第一种是显式声名的事务,这种事务要以begin
transaction为事务的起始标志。第二种是自动提交事务,这是sql
server的缺省设置。每一个t-sql语句在执行完成后会被自动提交。第三种是隐含事务,在这种方式下,sql
server会在当前事务被提交或回滚后自动启动一个新的事务,这个新事务直到用户执行commit或rollback为止,这时系统又会启动一个新事务。这样就形成了一个连续的事务链。
一、跨数据库访问
第一种方式
SELECT * FROM OPENDATASOURCE(
'SQLOLEDB',
'Data Source=远程ip;User ID=sa;Password=密码'
).库名.dbo.表名
WHERE 条件
第二种方式
在sql server组->服务->安全性->链接服务器下建立一个具有别名的链接服务器。然后通过以下方式访问:
SELECT * FROM [链接服务器名].库名.dbo.表名
WHERE 条件
需要注意的是建立链接数据库服务器类型如果选择“SQL server”,那么链接服务器名称必须用要链接的服务器的在网络中的机器名或IP,如果要使用其它别名,可以在WINDOWS\system32\drivers\etc\hosts文件里添加一个别名的映射。
解除SQL阻止(sqlserver 2005情况)
SQL Server 阻止了对组件 ‘Ad Hoc Distributed Queries’ 的 STATEMENT’OpenRowset/OpenDatasource’ 的访问,因为此组件已作为此服务器安全配置的一部分而被关闭。系统管理员可以通过使用 sp_configure 启用 ‘Ad Hoc Distributed Queries’。有关启用 ‘Ad Hoc Distributed Queries’ 的详细信息,请参阅 SQL Server 联机丛书中的 “外围应用配置器”。
因为SQL2005默认是没有开启’Ad Hoc Distributed Queries’ 组件,开启方法如下
EXEC sp_configure 'show advanced options', 1
GO
RECONFIGURE
GO
EXEC sp_configure 'Ad Hoc Distributed Queries', 1
GO
RECONFIGURE
GO
关闭Ad Hoc Distributed Queries:
exec sp_configure 'Ad Hoc Distributed Queries', 0
reconfigure
exec sp_configure 'show advanced options', 0
reconfigure
二、分布式事务的配置
1.用DTCPing.exe工具测试两台机器的DTC服务是否可以联通。
2.如果有问题检查MSDTC服务是否启动。
3.MSDTC依赖于RPC,RPC使用的端口是135,测试135端口是否打开.是否有防火墙?如果有先关了防火墙. telnet IP 135 如果是关闭的打开它.
4.打开“控制面板->管理工具->组件服务”,然后展开“组件服务->计算机->我的电脑”右键属性。选择MSDTC的Tab栏,点击安全性配置按钮,打开窗口,将“网络DTC访问”选项选中,并将“允许远程客户端”,“允许入站”,“允许出站”都选中,并选择“不要求进行验证”,“启用事务Internet协议(TIP)事务”,“启用XA事务”都选中。然后确定即可。(以上选项windows默认不开放,必须配置)
5.检查你的两台服务器是否在同一个域中. 如果不在同一个域中,是否建立可信任联接.
6.如果是WIN2000,升级到SP4
7.确认MDAC版本是2.6以上,最好是2.8.
8.在SQL server存储过程中使用分布式事务时,必须SET XACT_ABORT ON --设置分布式事务如果发生问题主动回滚操作
9.可以声明使用BEGIN DISTRIBUTED TRANSACTION,如果未明确生明,在事务块中包含链接服务器的访问,SQL server会自动升级成分布式事务。
‘叁’ sql 中 事务是用来干嘛的 到底应该怎么写语句
SQL事务主要应用于保证多个表
数据更新
的一致性。如很多场合,要求一个表中更新或插入一条数据,另一个表也要更新或插入数据。要么都做,要么都不做,不能出现不一致的情况。例如从ATM中取钱需要以下几个步骤:输入一个PIN号码,选择一个帐户类型和输入你想要提取的资金的金额。如果你试图从ATM中取出50元,然后操作失败,你肯定不愿意在没有拿到钱的情况下被扣除50元。事务就可以被用来保证这种一致性。
‘肆’ SQL事务概念是什么,举个例子说明什么样的东西是事务,与程序又有何区别,
数据库事务是构成单一逻辑工作单元的操作集合。
举例:转账是生活中常见的操作,比如从A账户转账100元到B账号。站在用户角度而言,这是一个逻辑上的单一操作,然而在数据库系统中,至少会分成两个步骤来完成:
1、将A账户的金额减少100元
2、将B账户的金额增加100元。
与程序的区别:一个程序中包含多个事务。在关系数据库中,一个事务可以是一条SQL语句,一组SQL语句或整个程序。
(4)sql事务块扩展阅读:
事务必须具备四个属性,简称ACID属性:
1、原子性(Atomicity):事务是一个完整的操作。事务的各步操作是不可分的(原子的);要么都执行,要么都不执行。
2、一致性(Consistency):当事务完成时,数据必须处于一致状态。
3、隔离性(Isolation):对数据进行修改的所有并发事务是彼此隔离的,这表明事务必须是独立的,它不应以任何方式依赖于或影响其他事务。
4、永久性(Durability):事务完成后,它对数据库的修改被永久保持,事务日志能够保持事务的永久性。
‘伍’ 事务在SQL中有什么作用
事务的好处在于,当你需要对多个表进行相关性操作时,使用BeginTrans()开启事务,然后操作,如果中间哪个表更新出错了,或者数据有问题,你可以用RollBack()方法在取消之前的相关性操作,如果没有错,那就使用Commit()方法提交你的修改。另外,在这个过程中,所有你改动的内容只对你自己有效,别人不能知道你改了什么,也不能对你正在改的表做修改,直到你提交之后,别人才能修改这些表,检索出你修改过的内容。
‘陆’ C#事务和sql事务的区别
在.NET 2.0中新添加了一个名为System.Transactions的命名空间,其提供了一个“轻量级”的、易于使用的事务框架,通过这个框架可以大大简化事务的操作。
这个框架提供了如下优点:
(1)在简单(不涉及分布式)事务中也可以使用声明式的事务处理方法,而不必使用Com+容器和目录注册。
(2)用户根本不需要考虑是简单事务还是分布式事务。它实现一种所谓自动提升事务机制(Promotable Transaction),会自动根据事务中涉及的对象资源判断使用何种事务管理器。
TransactionScope事务类,它可以使代码块成为事务性代码。并自动提升为分布式事务
在ADO.NET 中,可以使用Connection 和Transaction 对象来控制事务。若要执行事务,请执行下列操作:
调用Connection 对象的BeginTransaction 方法来标记事务的开始。
将Transaction 对象分配给要执行的Command的Transaction 属性。
执行所需的命令。
调用Transaction 对象的Commit 方法来完成事务,或调用Rollback 方法来取消事务。
优点:简单,效率和数据库事务差不多快。
缺点:事务执行在数据库连接层上,所以你需要在事务过程中手动的维护一个连接。
二者来说 TransactionScope是对所有事务接口的管理(包括数据库,分布式事务、文件,自定义事务管理等等) ,sql事务只是其管理中的一种。
‘柒’ 请详细解释一下SQL中事务的定义以及实例。
事务是一种机制,是一个操作序列。事务包含了一组数据库操作命令,所有的命令作为一个整体一起向系统提交或撤销,这些命令要么都执行要么都不执行,因此事务是一个不可分割的逻辑工作单元。一个事务可能包括一条Transact-SQL语句,也可能包括多条Transact-SQL语句。
实例:设计一个简单的事务。
USE 学生成绩管理
GO
BEGIN TRAN -----开始一个事务
UPDATE 课程表 SET 学分=学分+1
DELETE FROM 成绩表 WHERE 成绩<60
COMMIT TRAN ------结束一个事务
GO
‘捌’ 如何编写SQL事务
给你一个参考的sql吧:
--创建帐户表bank--
if exists(select* from sysobjects where name='bank')
drop table bank
create table bank
(
customerName char(10), --顾客姓名
currentMoney money --当前余额
)
go
/**//*--添加约束,帐户不能少于元--*/
alter table bank add
constraint CK_currentMoney check(currentMoney>=1)
/**//*--插入测试数据--*/
insert into bank(customerName,currentMoney)
select '张三',1000 union
select '李四',1
select * from bank
go
/**//*--使用事务--*/
use stuDB
go
--恢复原来的数据
--update bank set currentMoney=currentMoney-1000 where customerName='李'
set nocount on --不显示受影响的行数
print '查看转帐事务前的余额'
select * from bank
go
/**//*--开始事务--*/
begin transaction
declare @errorSum int --定义变量,用于累计事务执行过程中的错误
/**//*--转帐--*/
update bank set currentMoney=currentMoney-800 where customerName='张三'
set @errorSum=@errorSum+@@error --累计是否有错误
update bank set currentMoney=currentMoney+800 where customerName='李四'
set @errorSum=@errorSum+@@error --累计是否有错误
print '查看转帐事务过程中的余额'
select * from bank
/**//*--根据是否有错误,确定事务是提交还是回滚--*/
if @errorSum>0
begin
print '交易失败,回滚事务.'
rollback transaction
end
else
begin
print '交易成功,提交事务,写入硬盘,永久保存!'
commit transaction
end
go
print '查看转帐后的余额'
select * from bank
go
‘玖’ SQL事务的概念,四个特性
(1):事务(transaction)是并发控制的单位,是用户定义的一个操作序列。这些操作要么都做,要么都不做,是一个不可分割的工作单位。通过事务,sql
server能将逻辑相关的一组操作绑定在一起,以便服务器保持数据的完整性。
(2):事务通常是以begin
transaction开始,以commit或rollback结束。
commit表示提交,即提交事务的所有操作。具体地说就是将事务中所有对数据库的更新写回到磁盘上的物理数据库中去,事务正常结束。
rollback表示回滚,即在事务运行的过程中发生了某种故障,事务不能继续进行,系统将事务中对数据库的所有以完成的操作全部撤消,滚回到事务开始的状态。
(3):事务运行的三种模式:
a:自动提交事务
每条单独的语句都是一个事务。每个语句后都隐含一个commit。
b:显式事务
以begin
transaction显式开始,以commit或rollback显式结束。
c:隐性事务
在前一个事务完成时,新事务隐式启动,但每个事务仍以commit或rollback显式结束。
(4):事务的特性(acid特性)
a:原子性(atomicity)
事务是数据库的逻辑工作单位,事务中包括的诸操作要么全做,要么全不做。
b:一致性(consistency)
事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
c:隔离性(isolation)
一个事务的执行不能被其他事务干扰。
d:持续性/永久性(rability)
一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。
注:事务是恢复和并发控制的基本单位。
((1)是回答事务的概念到底是什么——即你的提问,至于(2)、(3)、(4)只是作的稍许补充而已,不必深究,呵呵……)