mysql - 如何只更新 DB2 中的一条记录?

标签 mysql database transactions db2

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

熟悉 MySQL's UPDATE 中的 LIMIT 子句选项

places a limit on the number of rows that can be updated

我在 DB2's UPDATE reference 中寻找类似的东西但没有成功。

如何在 DB2 中实现类似的东西?


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

最佳答案

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

限制 UPDATE 修改的行数:

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

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;


这就是 DB2 通过 UPDATEINSERTDELETE 语句支持 SELECT 的方式:

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

SELECT 将只返回修改过的行的数据。

关于mysql - 如何只更新 DB2 中的一条记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8735428/

相关文章:

java - Spring @Transactional 在一个方面(AOP)

java - Spring @Transaction (readonly=true) 上下文在进程中间将数据提交到DB

mysql - 计算问卷排名

mysql - 何时在 SQL 表字段(MySQL)上添加索引?

database - 如何 “join” 2索引并在ElasticSearch中搜索?

php - 社交网站的数据库关系或 friend 表设计

performance - 如何在 Go 中通过清晰的结构值优化性能?

php - 自动删除 MySQL 数据库中的消息

PHP MySQL,基于日期时间行的行总和

php - 按顺序分组纬度和经度对