事务中的LAST_INSERT_ID()是否可靠?

时间:2011-09-15 17:01:13

标签: .net mysql ado.net concurrency thread-safety

我正在使用mysql / ado.net / C#继承我的问题 我知道mysql是并发的,但我有文件数据(缩写名称)和db数据(行)同步。

如果我开始交易但由于任何原因失败将会出现问题?如果我在两个内核上同时运行此代码,它们会互相破坏吗?我基本上需要知道1)last_insert_id是否可靠而不改变。 2)如果一个事务使用所述rowid,则另一个事务不会使用它。

start transaction
insert statement, however i dont want it to be active yet;
select LAST_INSERT_ID()
File.Delete(lastid)//may exist from a transaction that failed
File.Move(thumbImage, lastid)
transaction.commit()//ok done

这样安全吗?为什么或为什么不呢?

1 个答案:

答案 0 :(得分:28)

MySQL的last_insert_id()是可靠的,因为它始终是由THAT PARTICULAR连接执行的最后一次插入。它不会报告由其他连接创建的插入ID,也不会报告您之前连接过两次的插入。实际插入发生在哪个cpu核心以及处理last_insert_id()调用的核心并不重要。它始终是该连接的正确ID号。

如果您回滚执行插入的事务,则last_insert_id()将STILL报告该新ID,即使它不再存在。但是,在后续插入

中不会重用id