我正在使用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
这样安全吗?为什么或为什么不呢?
答案 0 :(得分:28)
MySQL的last_insert_id()是可靠的,因为它始终是由THAT PARTICULAR连接执行的最后一次插入。它不会报告由其他连接创建的插入ID,也不会报告您之前连接过两次的插入。实际插入发生在哪个cpu核心以及处理last_insert_id()调用的核心并不重要。它始终是该连接的正确ID号。
如果您回滚执行插入的事务,则last_insert_id()将STILL报告该新ID,即使它不再存在。但是,在后续插入
中不会重用id