【发布时间】:2011-09-15 17:01:12
【问题描述】:
我正在使用 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
这样安全吗?为什么或为什么不?
【问题讨论】:
-
您确实意识到您的文件系统没有事务的概念,因此回滚事务将不会撤消文件系统中的更改,不要你?据我所知,虽然 File.Delete 或 File.Move 中的异常会导致事务回滚,但 File.Move 中的异常将不会撤消 File.Delete。
-
@veggen:我根本不需要我要删除的文件。事实上,我说它可能不存在,如果它存在,它就失败了。我不记得 thumbImage 是生成的还是原始的,但我想我检查它是否存在,如果它存在,我知道它已“完成”并删除工作事务(如果我以某种方式搞砸了,那么它仍然会删除哪个没关系,因为这将是一个不可恢复的错误,但这个作业队列没有失败,对我来说看起来很可靠)
标签: .net mysql ado.net concurrency thread-safety