我有 2 个非事务表。我想在一个上执行“插入”,在另一个上执行“更新”。
我想以原子方式执行此操作,两者都应该通过或都不应通过。
如何对非事务表实现此目的?我正在使用 MySql
最佳答案
如果没有事务机制,您需要保护将访问数据库的读写代码。
一些伪代码,用于在关键部分执行写入和读取操作,并通过信号量进行保护:
Semaphore sem;
bool method write (data) {
lock(sem);
ok = do (insert data into table);
prevdata = do (select olddata from table2);
ok2 = do (update data into table2);
if (ok && !ok2) do (delete date from table);
else if (!ok && ok2) do (update olddata into table2);
unlock(sem);
return (ok && ok2);
}
datacontainer method read () {
lock (sem);
data = do (select data from table);
unlock(sem);
return data;
}
datacontainer method read2 () {
lock (sem);
data = do (select data from table2);
unlock(sem);
return data;
}
可以根据您的需要优化同步。
如果你可以使用 InnoDB,那就简单多了:在 MySQL 代码中
START TRANSACTION;
INSERT INTO table (...) VALUES (...);
UPDATE table2 SET data=... WHERE ...;
COMMIT;
关于sql - 非事务表中的原子事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4697844/