我正在使用 mysql/ado.net/C# 这是我的问题
我知道 mysql 是并发的,但是我有文件数据(缩略图名称)和数据库数据(行)同步。
如果我开始一笔交易,但因任何原因失败,这会是一个问题吗?如果我在两个核心上同时运行这段代码,它们会互相破坏吗?我本质上需要知道 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
这安全吗?为什么或者为什么不?
MySQL 的last_insert_id() 是可靠的,因为它始终是该特定连接执行的最后一个插入。它不会报告由其他连接创建的插入 ID,也不会报告您在两个连接之前执行的插入。实际插入发生在哪个 cpu 核心上以及在哪个核心上处理 last_insert_id() 调用并不重要。它始终是该连接的正确 ID 号。
如果回滚执行插入的事务,last_insert_id() 仍然会报告新的 id,即使它不再存在。但是,在后续插入中,该 id 不会被重用
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)