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 是不是同时支持原子选择和更新的主要内容,如果未能解决你的问题,请参考以下文章