我需要选择表的行然后更新行的字段。 例如:
"SELECT * FROM `messages` WHERE `timestamp`>'1422680952'"
然后我想更新那些行的字段。
答案 0 :(得分:2)
您所描述的操作,从SELECT
返回结果集和执行UPDATE
的不能在MySQL中的单个SQL语句中执行。
您需要两个单独的SQL语句:SELECT
和UPDATE
。
就MySQL而言,在运行SELECT
之前没有必要运行UPDATE
,只能运行UPDATE
。
UPDATE `messages` SET somecol = 'somevalue' WHERE `timestamp`>'1422680952'
(问题中的查询用双引号括起来。这使我们怀疑你是用PHP等语言从数据库接口库运行这个语句。)
可以将多个语句作为单个事务的一部分执行。但就MySQL服务器本身实际处理指定操作的方式而言,这将是两个单独的语句。
答案 1 :(得分:0)
您可以将交易用于此目的 您可以在Transaction
中选择和更新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();
}
答案 2 :(得分:0)
如果您的目的只是更新表格,则可以使用以下语法:
Update messages
Set display = 1
Where timestamp >'1422680952'
答案 3 :(得分:0)
要更新行,您不必选择行。尝试类似:
UPDATE messages
SET display = 1
WHERE timestamp >'1422680952'
答案 4 :(得分:0)
注意:该代码不作为答案或工作代码出现。但是要进一步解释这个问题的概念。
我认为OP想要的就是这样-
"SELECT *, (UPDATE messages SET display = display + 1 WHERE key = key) AS display FROM messages WHERE timestamp > '1422680952'"
使用SELECT
作为子查询是可能的,但是我不能说UPDATE
是否可以。
当我在应用程序中遇到类似案例时,我遇到了这个问题。我需要存储视图数,即table
上的数据库命中数。row
而不写2个查询。