如何仅更新 DB2 中的一条记录?

Mar*_*tuc 5 mysql database db2 transactions

DB2 中,我需要执行SELECT FROM UPDATE, 将更新 + 选择放在单个事务中。
但我需要确保每笔交易只更新一条记录

熟悉MySQL选项中的LIMIT子句UPDATE

限制可以更新的行数

我在DB2 的UPDATE参考资料中寻找了类似的东西,但没有成功。

如何在 DB2 中实现类似的功能?


编辑:在我的场景中,我必须根据要求提供 1000 个优惠券代码。我只需要选择尚未给出的(任何)一个。

Fre*_*tka 5

该问题使用了一些模棱两可的术语,因此不清楚需要完成什么。幸运的是,DB2 为各种 SQL 模式提供了强大的支持。

要限制由 修改的行数UPDATE

UPDATE 
( SELECT t.column1 FROM someschema.sometable t WHERE ... FETCH FIRST ROW ONLY
) 
SET column1 = 'newvalue';
Run Code Online (Sandbox Code Playgroud)

UPDATE语句永远不会看到基表,只会看到过滤它的表达式,因此您可以控制更新哪些行。


对于INSERT有限数量的新行:

INSERT INTO mktg.offeredcoupons( cust_id, coupon_id, offered_on, expires_on )
SELECT c.cust_id, 1234, CURRENT TIMESTAMP, CURRENT TIMESTAMP + 30 DAYS 
FROM mktg.customers c 
LEFT OUTER JOIN mktg.offered_coupons o
ON o.cust_id = c.cust_id
WHERE ....
AND o.cust_id IS NULL
FETCH FIRST 1000 ROWS ONLY;
Run Code Online (Sandbox Code Playgroud)


这是 DB2SELECTUPDATE, INSERT, 或DELETE语句支持的方式:

SELECT column1 FROM NEW TABLE (
    UPDATE ( SELECT column1 FROM someschema.sometable 
             WHERE ... FETCH FIRST ROW ONLY
    ) 
    SET column1 = 'newvalue'
) AS x;
Run Code Online (Sandbox Code Playgroud)

SELECT会只从修改的行返回数据。