MySQL 是不是同时支持原子选择和更新

Posted

技术标签:

【中文标题】MySQL 是不是同时支持原子选择和更新【英文标题】:Does MySQL Support Atomic Select and Update TogetherMySQL 是否同时支持原子选择和更新 【发布时间】:2013-03-22 14:48:25 【问题描述】:

我正在 mysql 中寻找类似以下的内容:

SELECT Field1 
FROM MyTable 
AFTER UPDATE 
SET Field2 = 'myvalueX' 
WHERE Field3 = 'myvalueY';

上述假设语句为受语句更新部分影响的每一行返回 Field1 的值。

MySQL中是否存在这样的语句?

【问题讨论】:

这称为事务。您可以在此处阅读文档。 . . dev.mysql.com/doc/refman/5.0/en/commit.html. OUTPUT Clause in MySQL的可能重复 我同意我的问题是重复的,我在搜索中错过了这个问题。感谢贾斯汀使声明更具可读性。 【参考方案1】:

执行以下操作:

START TRANSACTION;
UPDATE ....
SELECT ....
COMMIT;

【讨论】:

虽然功能强大,但这可能不是最佳解决方案,因为它可能会大大降低性能(锁定整个表),除非这不应该是经常发生的操作。【参考方案2】:

如果您只更新一行,请使用last_insert_id() 来实现原子选择和同时更新

update <table> set status=1,id=last_insert_id(id) where status=0 limit 1;
select * from <table> where id=last_insert_id() limit 1;

【讨论】:

以上是关于MySQL 是不是同时支持原子选择和更新的主要内容,如果未能解决你的问题,请参考以下文章

mysql事务机制

Mysql 多连接与原子更新 sql 查询 [竞争条件]

mysql 事务

mysql数据库!在线浏览表中内容,同时修改多条内容并更新至数据库

在 PHP 和 Mysql 中同时更新图像和文本

MySQL事务详解