我有一个带有MySQL表的InnoDB数据库。有不同的客户机进程生成SELECT (检查值的存在)和INSERT或UPDATE (取决于select的结果)语句。我担心的是对数据的并发访问只会导致INSERTs而没有UPDATEs。锁表写入是唯一的解决方案吗?
发布于 2014-01-12 05:43:46
看起来你需要SELECT ... FOR UPDATE
伪码:
START TRANSACTION;
SELECT some_column INTO @value FROM table_name WHERE ... FOR UPDATE;
IF @value = 'some value' THEN
INSERT INTO table_name VALUES(...);
END IF;
INSERT INTO referenced_table VALUES(...);
COMMIT;发布于 2012-12-17 09:22:50
如果此表没有附加其他外键,则可以尝试插入.在重复键更新或替换为(此键删除现有行并插入新行)
这将省去您必须先选择,然后插入或更新,但是它要求您有一个唯一的键作为基础检查。
https://dba.stackexchange.com/questions/30553
复制相似问题