我在我的项目中使用pg,pg-本机,我使用的事务类似于下面的代码,我不熟悉数据库,
https://github.com/brianc/node-postgres/wiki/Transactions
Create、Update、Delete在CRUD中。但还可以是Read吗?如果是这样的话,数据是被选中的,这是在此更改之前(在BEGIN之前)的数据吗?"pg":"^4.5.1",“pg-原生”:"^1.10.0",
var pg = require('pg').native;
...
var rollback = function(dbClient, response) {
dbClient.query('ROLLBACK', function() {
dbClient.end();
// reject(response);
});
};
dbClient.query('BEGIN', function(error, result) {
...
dbClient.query('COMMIT', dbClient.end.bind(dbClient));
...发布于 2016-11-09 09:49:33
阅读文献资料获得完整的图片。这是值得努力的。
PostgreSQL有不同级别的锁定:表锁和行锁(我不会进入建议锁)。
可以使用LOCK命令显式地获取表锁,但这是您通常不做的事情。正常情况是在访问表时使用的隐式表锁--例如,当您在表中读取或写入数据时,将采取防止并发用户在表上使用ALTER或DROP的锁。
行锁由DML语句(INSERT、UPDATE和DELETE)以及SELECT ... FOR SHARE/UPDATE获取。它们防止同时修改已锁定的行。
所有锁都在事务结束时释放。如果没有显式启动事务,那么每个语句都在自己的事务中运行,锁不会超过单个语句的持续时间。如果使用BEGIN或START TRANSACTION显式启动事务,则事务将一直持续到COMMIT或ROLLBACK。
PostgreSQL (以及其他使用多版本并发控制的数据库)的一个重要设计概念是,读取器从不阻止作者,反之亦然。这是通过将旧版本的数据保存在周围,并为读者提供在快照时有效的数据(大致上,数据库的一致视图在语句或事务开始时是有效的)。这些老行最终由自动真空背景过程清理。
https://stackoverflow.com/questions/40496991
复制相似问题