首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更新mysql表。一个字段= old_value -1

更新mysql表。一个字段= old_value -1
EN

Stack Overflow用户
提问于 2011-04-03 23:56:09
回答 2查看 6.7K关注 0票数 3

我需要做的是:-从表formfields中删除一个条目-使用排序更新每个字段>(已删除字段的排序)-将更新字段的排序设置为当前值减1(例如,如果字段上的当前排序为8,则应设置为7)。

这可以在一个查询中实现吗?或者我怎样才能做到这一点?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-04-04 01:35:19

您可以设置一个事务来一次完成所有这些操作。

给出下表:

代码语言:javascript
复制
CREATE TABLE `formfields` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(25) NOT NULL,
  `order_no` int(11) NOT NULL,
  PRIMARY KEY (`id`)
);

您可以执行以下操作:

代码语言:javascript
复制
START TRANSACTION;
DELETE FROM formfields WHERE order_no = {YOUR_NUM};
UPDATE formfields SET order_no = order_no - 1 WHERE order_no > {YOUR_NUM};
COMMIT;
票数 8
EN

Stack Overflow用户

发布于 2011-04-04 00:00:05

显然,您不能在同一查询中执行DELETEUPDATE,但是您可以使用InnoDB,启动一个事务,运行delete查询,然后使用一个更新查询,例如...

代码语言:javascript
复制
UPDATE formfields SET field_value = field_value - 1 
WHERE field_value >= <VALUE YOU'VE JUST DELETED>

提交事务的...prior。

使用MyISAM表背靠背地执行这两个查询,十有八九是有效的(取决于负载等),但是您真的不应该这样做。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5530676

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档