当我们需要在DB2中提示提交或回滚时,我有一个shell脚本来运行SQL文件。我面临的问题是一个MERGE
声明。如果SQL脚本有一个带有update语句的MERGE
,那么在我们提交之前,更改不会反映在表中。但是,如果我有一个简单的UPDATE
语句,即使没有提交它,我也可以使用"with ur"
选项看到数据中的变化。如果脚本的MERGE
和update在MERGE
之后有一个COMMIT
,我们不能回滚更改,因为它们已经提交了。有人能告诉COMMIT
是强制执行MERGE
语句后看到的变化吗?
SQL中的MERGE
语句与INSERT
、UPDATE
或DELETE
在从其他连接隔离未提交的更改方面没有什么不同。执行DML的连接总是可以在提交之前看到自己的更改。要查看由另一个连接所做的未提交的更改("脏读"),通过在SELECT
语句的末尾添加WITH UR
限定符来指定未提交的读隔离。
对于自动提交,可以在DB2 CLP中通过为工作单元中的每个语句指定-c-
选项来禁用它:
db2 -c- " UPDATE employee SET salary = 200000 WHERE empno= '000010' "
db2 -c- " SELECT salary FROM employee WHERE empno = '000010' "
db2 -c- " ROLLBACK "
db2 -c- " SELECT salary FROM employee WHERE empno = '000010' "