当前位置: 首页 > 面试题库 >

在mysql中选择更新的行

乐正宏深
2023-03-14
问题内容

有没有简单的方法来选择更新的行?

我试图每次读取行时都存储时间戳,以便能够删除长时间未读取的数据。

首先,我首先尝试执行SELECT查询,甚至发现有点慢但是简单的解决方案,例如

 UPDATE foo AS t, (SELECT id FROM foo WHERE statement=1)q
 SET t.time=NOW() WHERE t.id=q.id

但我仍然想找到一种正常的方法来做到这一点。

我还认为先更新时间然后选择更新的行应该容易得多,但是即使如此,我也没有找到任何东西


问题答案:

声明该time列,如下所示:

CREATE TABLE foo (
    ...
    time TIMESTAMP ON UPDATE CURRENT_TIMESTAMP(),
    ...)

然后,每当更新一行时,该列就会自动更新。

更新:

我认为没有方法可以在SELECT期间自动更新,因此您必须分两步进行:

UPDATE foo
SET time = NOW()
WHERE <conditions>;

SELECT <columns>
FROM foo
WHERE <conditions>;

只要不包括该time列,我都认为这应该起作用。为了最大程度的安全,您将需要使用事务来防止其他查询受到干扰。



 类似资料:
  • 问题内容: 根据MySql文档,MySql支持多重粒度锁定(MGL)。 打开终端1: //连接到mysql 离开它打开并打开终端2: //连接到mysql 尽管要检索的行很多,但T2等待直到t1完成。 情况2 保持端子1不变,现在位于端子2中: 但是,为什么在情况1中,T2等待T1锁定的同一行集? 这是否意味着无限制的选择查询(即使使用limint参数。我也尝试了不同的范围)阻塞了整个表? 有什么

  • 问题内容: 我是MSSQL用户,现在将数据库转换为MySQL。我在MySQL中编写以下查询: 我得到以下错误 如何用MySQL正确编写这样的查询? 问题答案: 使用CREATE TABLE SELECT语法。 http://dev.mysql.com/doc/refman/5.0/en/create-table- select.html

  • 如果我分别创建这两个MySQL触发器,两个触发器都执行OK。但我无法将它们组合起来,使其能够乘以持续时间x速率。 如果存在,则删除触发器;为每一行更新后创建definer=@TRIGGERSET@rate=(从语言中选择速率,其中languages.idlanguages=contracts.languages_idlanguagejes); 如果存在,则删除触发器;CREATE definer=

  • 我正在使用Postgres 9.3.5,最近将Hibernate从3.2更新到4.3.11。 因此,我无法运行“选择…更新”查询,而只能运行“选择…”。。对于我来说,“for update”是不够的,因为它返回 无法提取结果集。原因:错误:无法将FOR UPDATE应用于外部联接的可空端 我试图使用的标准如下: 我正在使用以下锁定: 在3.2中:标准。设置锁定模式(锁定模式。升级); 在4.3.1

  • 问题内容: 如果我有桌子 并且我想获取字段的所有唯一值,这会更快(或建议使用): 要么 ? 问题答案: 它们本质上是彼此等效的(实际上这就是某些数据库在后台实现的方式)。 如果其中之一更快,那就快了。这是因为,尽管两者相同,但是查询优化器将不得不抓住一个事实,即您没有利用任何组成员,而只是利用了他们的键。明确说明这一点,因此您可以使用稍微笨拙的优化程序。 如有疑问,请测试!

  • 问题内容: 如果我有表 并且我想获取所有唯一值的字段,这会更快(或建议): 或者 ? 问题答案: 它们本质上是彼此等效的(实际上,这就是某些数据库在后台实现的方式)。 如果其中之一更快,那就快了。这是因为,尽管两者相同,但查询优化器将不得不抓住一个事实,即您没有利用任何组成员,而只是利用了他们的键。明确说明这一点,因此您可以使用稍微笨拙的优化程序。 如有疑问,请进行测试!