我想创建一个用于以类似事务的方式操作发票的界面.
该数据库包含一个发票表和一个invoice_lines表,发票表中包含结算信息,invoice_lines表包含发票的行项目.该网站是一组脚本,允许添加,修改和删除发票及其相应的行.
我遇到的问题是,我希望数据库的ACID属性能够反映在Web应用程序中.
>原子:当用户点击保存时,修改整个发票或根本不更改整个发票.
>一致:应用程序代码已确保一致性,不能将行添加到不存在的发票中.发票ID不能重复.
>隔离:如果用户正在对发票进行一组更改,我希望在用户单击“保存”之前隐藏其他用户的更改.
>耐用:如果网站死亡,数据应该是安全的.这已经有效了.
如果我正在编写桌面应用程序,它将始终保持与MySQL数据库的连接,允许我在编辑的开头和结尾简单地使用BEGIN TRANSACTION和COMMIT.
根据我的理解,你不能在一个PHP页面上进行BACIN TRANSACTION而在另一个页面上进行COMMIT,因为页面之间的连接是关闭的.
有没有办法在没有扩展的情况下实现这一目标?根据我的发现,只有SQL Relay这样做(但它是一个扩展).
你不想拥有长时间运行的事务,因为这会限制并发性.
http://en.wikipedia.org/wiki/Command_pattern