当前位置: 首页 > 面试题库 >

在MySQL原子中增加字段吗?

凌炜
2023-03-14
问题内容

我正在创建一个网站,希望在其中添加标准MyISAM表中的计数器。

简化示例:

UPDATE votes SET num = num + 1;

如果多个连接都在执行相同的查询,这会引起问题吗,还是MySQL会照顾它并锁定表或其他东西以确保没有冲突?


问题答案:

MyISAM表使用表级别锁定。这意味着在执行更新查询期间,整个表将被锁定。因此,简化用例的答案是:是的,这是线程安全的。但是,如果您使用其他存储引擎,或者您的更新中包含多个表,则情况可能并非如此。

这是MySQL手册中的一句话,以更加清楚:

表锁定使许多会话可以同时从一个表读取,但是如果一个会话要写入表,则必须首先获得互斥访问。在更新期间,要访问此特定表的所有其他会话都必须等待,直到更新完成。

如果适合您的设计,您也可以考虑使用自动增量列,事务或外部同步。

干杯!



 类似资料:
  • 本文向大家介绍mysql 增加修改字段类型及删除字段类型,包括了mysql 增加修改字段类型及删除字段类型的使用技巧和注意事项,需要的朋友参考一下 MySQL添加字段: 删除字段: 调整字段顺序: 增加字段:

  • 本文向大家介绍添加DATE和TIME字段以在MySQL中获取DATETIME字段?,包括了添加DATE和TIME字段以在MySQL中获取DATETIME字段?的使用技巧和注意事项,需要的朋友参考一下 您可以使用函数设置日期和时间字段以获取DATETIME字段。 让我们创建一个演示表 使用insert命令在表中插入一些记录。查询如下- 使用select语句显示表中的所有记录。查询如下- 以下是输出

  • 问题内容: 我正在尝试从DATE和TIME字段获取DATETIME字段。MYSQL中的所有功能似乎都没有用。 有人知道该怎么做,或者甚至可以做到吗?:) 问题答案: 它应该像

  • 问题内容: 基本上有属性表和翻译表-一个属性有很多翻译。 我需要从翻译中为指定属性的每个属性选择id和value,即使该语言没有翻译记录也是如此。我缺少某种连接技术,或者连接(不涉及语言表)在这里不起作用,因为以下操作不会返回具有指定语言的不存在的翻译的属性。 所以我正在使用这样的子查询,这里的问题是用相同的参数在同一个表中创建两个子查询(感觉像性能消耗,除非mysql将那些子查询分组,我怀疑这是

  • 字段自增 const flow = await this.ctx.model.Flow.findOne({ where: { art_id } }); await flow.increment('index', { by: 900 }); 字段自减 const flow = await this.ctx.model.Flow.findOne({ where: { art_id } }); awai

  • 问题内容: 常,当我们从多个进程附加到UNIX中的文件时,我们可以理所当然地做什么呢?是否有可能丢失数据(一个进程覆盖另一个进程的更改)?数据有可能被破坏吗?(例如,每个进程向日志文件中的每个追加追加一行,是否有可能使两行混乱?)如果从上述意义上说,追加不是原子的,那么确保互斥的最佳方法是什么? 问题答案: 小于“ PIPE_BUF”大小的写操作应该是原子的。该长度至少应为512字节,尽管它可以轻