表结构:
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
问题:
为什么会茶入记录?
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
问题:
为什么会茶入记录?
应该是insert into t1(id,value)values(2,1)的吧!!
insert into 表
select '11'
if @@rowcount>0 and @@error=0
commit tran
else
rollback tran
在
bagin tran
......
commit tran
中的语句如果有错误的话 会全部回滚 ,难道不是这样的吗?
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
问题:
为什么没有插入记录?
这个我也没有rollback 怎么没有插入记录呢
……
commit TRANSACTION 这是一个事务,这个事务中,如果有插入失败,则事务全部回滚。
set xact_abort 是什么? 有什么作用呢?
CREATE TABLE [dbo].[t1](
[id] [int] NOT NULL,
[value] [int] NULL,
CONSTRAINT [PK_t1] PRIMARY KEY CLUSTERED
(
[id] ASC
)) 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
问题:
为什么还能插入一条记录呢?
原因: set xact_abort 是off的 只会回滚出错的语句,第二句出错了,所以只回滚第二句测试二:
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
问题:
为什么没有插入记录?
原因: set xact_abort 是off的 严重的错误 ,回滚整个事务测试三:
BEGIN TRANSACTION
insert into t1(id,value)values(2,'1')
select id,value1 from t1 --表中没有value1字段
commit TRANSACTION
结果:
select * from t1
id value
问题:
为什么没有出入记录?
原因: set xact_abort 是off的 严重的错误 ,回滚整个事务测试四:
BEGIN TRANSACTION
insert into t1(id,value)values(2,'1')
select * from bb --bb表不存在
commit TRANSACTION 结果:
select * from t1
id value
2 1
问题:
为什么会茶入记录?
原因: 不知道为什么了?
可以了吧!