2016-09-07 67 views
-3

如果我有一个数据库事务,在同一个事务中创建和删除一个数据库,它会被计为插入吗?如果插入一条记录,并且在同一个事务中删除了相同的记录,那么它是否会被视为插入?

谢谢!

+0

*数据库被创建和删除* - >你的意思是*记录*对吗? – TheLostMind

+0

谁或做什么计数?没有更多的上下文,任何人都很难猜出你真正想问什么。 –

+0

ddl调用(创建)将中断事务。自动提交 – Drew

回答

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行。这在下一次电话会议中回滚了。

查看关于各种innodb gap-anomoly问题的我的简短回答Here。有很多很多很容易创建空白的情况下,如插入期间的外键错误。

相关问题