在多个Java客户端访问数据库时确保数据完整性

Dan*_*ean 1 java mysql database jdbc data-integrity

我有一个MySql数据库实例和一个Account表维护一个Balance字段.我有多个Java应用程序,每个都使用Jdbc连接到数据库,可能会增加或减少Balance字段的值.如何确保读取,计算和更新Balance值以及此过程是单独发生的,并且"了解"可能正在执行相同操作的任何其他Java进程?

Nev*_*uyt 5

简单的答案是使用事务:http: //dev.mysql.com/doc/refman/5.0/en/commit.html

但是,在您描述的情况下,我更倾向于不将帐户的余额存储为表中的列,而是通过将与该帐户相关的交易的值相加来计算它.它对您提出的完整性问题的敏感程度要低得多,而且您不太可能遇到模糊的锁定方案.

  • 通常,经过良好调整的数据库系统并不会在SUM中显着减慢数百(数十)千条记录的速度.当然,如果你必须计算出数千个帐户的余额,那可能就不那么容易了.在这种情况下,我使用了类似于您的建议的策略:有效地,存档历史交易,以及使用这些存档交易的总和创建"期初余额"交易. (2认同)