说我有一个调查,其中有两个单选按钮。是/否。显然我不想在数据库中存储一千个“是”和“否”。我只想要一个数字来计算“是的”和一个数字来计算“不是”。看起来这是最简单的方法
UPDATE `databasename`.`tablename` SET fieldB = fieldB + 1 WHERE fieldA='#';
但是我想知道两个人是否同时提交调查会看到数据库看到500个“是”并且都将其更新为501.或者是MySQL设置在那个人将不得不等待冷杉另一个先完成。
答案 0 :(得分:0)
您现有的sql将起作用,不应该有任何竞争条件。
Transactions阻止,以便两个事务不会同时执行。默认情况下,每个查询都是一个事务。
查看不同类型的数据库表以获取更多细节: myisam vs innodb
如果complex backend replication之间没有保证行锁定,则存在竞争条件的可能性。
为了确保基础架构和代码之间的关注点分离,您应该考虑原始的插入行解决方案。如果正确multi column index,您的阅读应该非常快。此外,随着您的应用程序扩展inserts are cheaper (execution time) than updates,当您的应用程序变得更加复杂时,您的数据已经更加规范化,因此更容易使您的响应比是/否更复杂。有关归一化数据有用的原因的一些解释,请参阅this wikipedia page。