如果插入记录并且在同一事务中删除了相同的记录,那么它是否算作插入?

时间:2016-09-07 05:33:12

标签: java mysql oracle jdbc

如果我有一个数据库事务,在同一个事务中创建和删除数据库,它会被计为插入吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

当然,如果你有一个自动增量字段,它就被插入了,如果你试图插入一个记录,这将真正反映出来。虽然我真的不知道你对这个问题的目的是什么。

答案 1 :(得分:1)

假设您的意思是插入一行,然后在您的问题中删除。

从确实发生的角度来看,并在INNODB中反转,是的。

见下文:

create table foo
(   id int auto_increment primary key,
    thing varchar(20) not null
)ENGINE=INNODB;

start transaction;
insert foo(thing) values ('frog');
commit;

start transaction;
insert foo(thing) values ('frog2');
-- Point-in-time A
rollback;

start transaction;
insert foo(thing) values ('frog3');
commit;

select * from foo;
+----+-------+
| id | thing |
+----+-------+
|  1 | frog  |
|  3 | frog3 |
+----+-------+

删除或rollback显示innodb缺口 - 异常,这意味着保留了范围,然后发生了删除。换句话说,AUTO_INCREMENT被保留,被插入,然后回滚(或删除)。

不仅如此,而且在"时间点A"以上,根据当时设置的Transaction Isolation Levels,系统中的其他用户甚至可以看到上面的 frog2 行。这是在下一次电话会议中回滚的。

请参阅我的Here的缩写答案,了解各种innodb间隙 - 异常问题。有很多很多可以轻松创建间隙,例如插入过程中的外键错误。