日期:2014-05-18  浏览次数:20664 次

一个关于事务的问题。大家帮忙解释一下
表结构:
CREATE   TABLE   [dbo].[t1](
[id]   [int]   NOT   NULL,
[value]   [int]   NULL,
  CONSTRAINT   [PK_t1]   PRIMARY   KEY   CLUSTERED  
(
[id]   ASC
)WITH   (IGNORE_DUP_KEY   =   OFF)   ON   [PRIMARY]
)   ON   [PRIMARY]

测试一:
BEGIN   TRANSACTION  
  insert   into   t1(id,value)values(2, '1 ')
  insert   into   t1(id,value)values(2, '1 ')
commit   TRANSACTION  
结果:
select   *   from   t1
id   value
2       1
问题:
为什么还能插入一条记录呢?

测试二:
BEGIN   TRANSACTION  
insert   into   t1(id,value)values(2, '1 ')
insert   into   t1(id,value1)values(2, '1 ')     --表中没有value1字段
commit   TRANSACTION  
结果:
select   *   from   t1
id   value
问题:
为什么没有插入记录?

测试三:
BEGIN   TRANSACTION  
insert   into   t1(id,value)values(2, '1 ')
select   id,value1   from   t1       --表中没有value1字段
commit   TRANSACTION  
结果:
select   *   from   t1
id   value
问题:
为什么没有出入记录?

测试四:
BEGIN   TRANSACTION  
insert   into   t1(id,value)values(2, '1 ')
select   *   from     bb       --bb表不存在
commit   TRANSACTION   结果:
select   *   from   t1
id   value
2       1
问题:
为什么会茶入记录?




------解决方案--------------------
另外,LZ在做这些事务的时候,set xact_abort的状态是什么呢。