小编Mah*_*koe的帖子

当您使用更长的字符串更新 VARCHAR 单元格时会发生什么?

VARCHAR(32)假设我在 mySQL 数据库中有一个类型的列。

9 月 1 日,我决定存储该字符串"tea",但 9 月 2 日,我决定将其更新为"coffee".

显然,如果该表中的所有记录都相互挤压,并且我们尝试将一条记录加长 3 个字节,那么该记录之后出现的所有记录都需要向下移动 3 个字节。当然,这是荒谬的;任何 DBMS 都不可能转移数千个可能的条目。

那么mySQL 在这种情况下到底会做什么呢?对于 TEXT 和 BLOB 类型,它的行为方式是否相同?

编辑: 一天后读完这篇文章后,我意识到这个问题相当模糊。这是一个我希望能够澄清问题的例子:

假设我有一个表,fav_drinks有两列:

  • user_id,这是一个INTEGER
  • drink,这是一个VARCHAR(32)

假设这个表在内存中是这样存储的:

[1,"juice",2,"tea",3,"soda",4,"hot chocolate"]
Run Code Online (Sandbox Code Playgroud)

也就是说,所有记录都按顺序存储。如果我们需要将用户 2 最喜欢的饮料从 更新为"tea""coffee"理论上我们需要将用户 3 和 4 的条目下移。当然,我不认为这在真实的数据库中会发生。

那么,重申一下这个问题,mySQL 如何管理一个表条目突然需要更多内存的这种特定情况?

mysql varchar update

5
推荐指数
1
解决办法
1109
查看次数

标签 统计

mysql ×1

update ×1

varchar ×1