Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL数据库:锁定金融交易列表?_Sql_Postgresql - Fatal编程技术网

SQL数据库:锁定金融交易列表?

SQL数据库:锁定金融交易列表?,sql,postgresql,Sql,Postgresql,我正在开发一个应用程序,该应用程序将有一个与用户关联的金融交易表,其中有一列指示用户总余额的变化。是否有一种方法可以添加一个限制,使表不接受会导致用户的总余额小于0的事务,而不必锁定整个表 如果我单独存储计算出的余额,我想我可以通过将余额表中的那一行锁定为一个事务的一部分来实现这一限制,该事务既添加了新的金融事务,又更新了余额,但我认为这种“计算的”这张桌子不受欢迎,因为它可能与真相的实际来源不同步。有没有办法避免这种做法?您不可能每次插入、更新或删除交易时都计算余额。出于性能原因,您需要在某个

我正在开发一个应用程序,该应用程序将有一个与用户关联的金融交易表,其中有一列指示用户总余额的变化。是否有一种方法可以添加一个限制,使表不接受会导致用户的总余额小于0的事务,而不必锁定整个表


如果我单独存储计算出的余额,我想我可以通过将余额表中的那一行锁定为一个事务的一部分来实现这一限制,该事务既添加了新的金融事务,又更新了余额,但我认为这种“计算的”这张桌子不受欢迎,因为它可能与真相的实际来源不同步。有没有办法避免这种做法?

您不可能每次插入、更新或删除交易时都计算余额。出于性能原因,您需要在某个地方保持运行平衡。为了保持它的完整性,可以使用预插入、预更新和预删除触发器。现在,为了在多线程场景下保持性能,您可以通过使用行版本号模式来避免行锁定;这样,您的DML语句将一直保持快速运行,同时始终验证您的约束。顺便提一下,问得好+1您不可能每次插入、更新或删除交易时都真正计算余额。出于性能原因,您需要在某个地方保持运行平衡。为了保持它的完整性,可以使用预插入、预更新和预删除触发器。现在,为了在多线程场景下保持性能,您可以通过使用行版本号模式来避免行锁定;这样,您的DML语句将一直保持快速运行,同时始终验证您的约束。顺便提一下,问得好+1.