如果我有一个数据库事务,在同一个事务中创建和删除数据库,它会被计为插入吗?
谢谢!
答案 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间隙 - 异常问题。有很多很多可以轻松创建间隙,例如插入过程中的外键错误。