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事务?