Mysql:首先选择,然后在一个查询中更新

Mysql:首先选择,然后在一个查询中更新,mysql,select,sql-update,Mysql,Select,Sql Update,我需要选择表中的行,然后更新行的字段。 例如: "SELECT * FROM `messages` WHERE `timestamp`>'1422680952'" 然后我想更新该行的一个字段。您可以为此使用事务 您可以在其中选择和更新内部事务 START TRANSACTION; -- Let's get the current value SELECT value FROM counters WHERE id = 1 FOR UPDATE; -- Increment

我需要选择表中的行,然后更新行的字段。 例如:

"SELECT * FROM `messages` WHERE `timestamp`>'1422680952'"

然后我想更新该行的一个字段。

您可以为此使用事务 您可以在其中选择和更新内部事务

START TRANSACTION;

  -- Let's get the current value
  SELECT value FROM counters WHERE id = 1 FOR UPDATE;

   -- Increment the counter
  UPDATE counters SET value = value + 1 WHERE id = 1;

  COMMIT;
一般是这样做的

try {
    // First of all, let's begin a transaction
    $db->beginTransaction();

    // A set of queries; if one fails, an exception should be thrown
    $db->query('select query');
    $db->query('update query');

    // If we arrive here, it means that no exception was thrown
    // i.e. no query has failed, and we can commit the transaction
    $db->commit();
} catch (Exception $e) {
    // An exception has been thrown
    // We must rollback the transaction
    $db->rollback();
}

如果只是更新表,可以使用以下语法:

Update messages
Set display = 1
Where timestamp >'1422680952' 

要更新行,不必选择行。尝试以下方法:

UPDATE messages
SET display = 1
WHERE timestamp >'1422680952' 

您描述的从
SELECT
返回结果集并执行
UPDATE
的操作不能在MySQL中的单个SQL语句中执行

您需要两个独立的SQL语句:一个
SELECT
和一个
UPDATE

UPDATE `messages` SET somecol = 'somevalue' WHERE `timestamp`>'1422680952'
就MySQL而言,在运行
更新
之前,不必运行
选择
,可以只运行
更新

UPDATE `messages` SET somecol = 'somevalue' WHERE `timestamp`>'1422680952'
(问题中的查询包含在双引号中。这使我们怀疑您是从PHP等语言的数据库接口库中运行此语句的。)

可以将多个语句作为单个事务的一部分执行。但就MySQL服务器本身如何实际处理指定的操作而言,这将是两个独立的语句。

警告:此代码不是作为答案或工作代码提供的。但要进一步解释这个问题的概念

我认为OP想要的是这样的东西-

“选择*,(更新消息集display=display+1,其中key=key)作为时间戳为“1422680952”的消息的显示

这可以通过
选择
作为子查询来实现,但我不能说
更新
是否可以实现

UPDATE `messages` SET somecol = 'somevalue' WHERE `timestamp`>'1422680952'

当我在应用程序中遇到类似的情况时,我遇到了这个问题。我需要存储视图的数量,即
上的数据库点击数,而无需编写两个查询。

例如:“从
消息
中选择*WHERE
时间戳
'1422680952'更新集
显示
='1')。如何在php中使用mysql事务?