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 如何管理一个表条目突然需要更多内存的这种特定情况?