ホームページ  >  記事  >  バックエンド開発  >  PHP在业务批量操作时如何保证原子性

PHP在业务批量操作时如何保证原子性

WBOY
WBOYオリジナル
2016-06-06 20:38:531224ブラウズ

用什么方法可以在业务批量操作时保证原子性呢?

例如:删除多条文章,但在中间有一条已经被删除了,假设这里会出现错误,那如何让整个操作回滚,并定位错误信息呢。

数据库的事务保证原子性但不能定位错误信息,但遇到无法使用事务的场景,应该怎么做呢。

回复内容:

用什么方法可以在业务批量操作时保证原子性呢?

例如:删除多条文章,但在中间有一条已经被删除了,假设这里会出现错误,那如何让整个操作回滚,并定位错误信息呢。

数据库的事务保证原子性但不能定位错误信息,但遇到无法使用事务的场景,应该怎么做呢。

  1. 利用数据库的事务来做是最合理的,错误信息可以记录啊,有操作失败抛出错误。
  2. 应用逻辑来保证,就是每操作一次做下记录,成功失败都做下记录。中间出错,可以把成功的回滚。一般我们删除是假删除,所以很容易。如果真删除,记录时要记录完整信息。

很好问题,期待高手来回答。

确实是很好的问题
我能想到的办法也和@star001007 一样;
1、建一个支持事务类型的db
2、删除时并非真正意义上的物理删除,只是设置一个标志位,比如status=1表示删除了,0表示正常。
3、记录删除日志,这些冗余信息有助于恢复记录。

利用mysql的innodb表的事务特性来实现即可,可以看我的案例:
如何大批量更新、删除、插入数据到数据库或者在线大批量的发邮件?

如何避免一个需求被执行多遍?同个需求如何让同事帮我协同办公?

问题其实很有问题,同一个表的删除操作,有原子性可言吗?
mysql 为例 delete from table where xxx=xxx
删除的时候逻辑上保证用一个sql语句完成,mysql自己就能保障

从不同表删除多条记录那就需要事务了

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。