对线面试官:MySQL 给数据表增加一列,一定会锁表吗?

需要明确的是,向数据表添加列并不一定会锁定表。
这确实很简单。
主要取决于MySQL的版本和操作类型。
我们先来说说最重要的事情。
从MySQL 5 .6 开始,InnoDB引擎支持在线DDL操作,例如添加列,而无需锁定整个表。
另一个问题是MySQL 8 .0在这方面做了进一步的优化,比如引入原子DDL操作,可以减少锁定时间和性能影响。
还有一个更重要的细节。
虽然添加列时​​表没有被锁定,但操作过程中可能会出现短暂的行锁定。

一开始我以为加一列肯定会锁表,后来发现错了。
事实上,这是通过一些优化技术实现的。
等等,还有一件事,在执行ALTERTABLE时,InnoDB引擎也可能会对性能产生一些影响,尤其是对于大表。

所以,如果你想在低负载期间向数据表添加一列,我认为值得一试。
不过,在操作之前不要忘记检查MySQL版本,以确保您使用的是支持在线DDL的版本。

MySQL表中如何增加列mysql表增加列

我记得去年夏天我帮助我的朋友建立了一个小型餐厅系统。
他们用一个破笔记本来记录订单,数据出了问题。
后来我教他们如何使用MySQL,他们很高兴。
其中一项任务涉及向表添加列。
以前,他们甚至不知道数据库在哪里。

创建新表并添加列就像建造新房子一样。
您正在考虑在打地基之前添加房间。
您只能写入 TABLE 订单 (order_order INT, customer_name VARCHAR(2 5 5 ))。
容易吧?当时我的朋友们听了我的话,眼睛都亮了,说早点知道就好了。
但后来他们发现,餐厅开业已经半年了,突然发现必须增加“特殊要求”一栏。
在这种情况下,您应该使用 ALTER TABLE 命令 ADD SPECIAL_QUERIES TEXT。
我记得那天坐在他们厨房的桌子旁,阳光透过窗户照进来,我敲着键盘输入了这行代码。
他们的老板向一旁点点头,说道:“现在注意一下过敏之类的事情。
”具体来说,7 月8 日下午,他们在测试新手表时,遇到一位顾客要求附上一张纸条,上面写着“我不饿”。

等等,还有一件事。
添加列时,应注意指针。
例如,添加 order_date 列。
如果您每天检查多次,只需添加 order_date DATE INDEX 即可。
后来朋友告诉我,他们一会儿查订单速度很快。
查日记要花半天的时间。

我突然想到,如果表中数据很多,添加列会不会很慢?据了解,一般影响不大,但要等一段时间。
在他们的旧电脑上,当我添加一栏时,我还没来得及看到进度条就喝了茶。
新的计算机速度快得你无法分辨。

最重要的是在添加之前备份它们。
他们在最后一次添加之前没有进行备份,结果在过程中出现了蓝屏,几乎丢失了所有数据。
后来我规定他们工作前必须做好备份。
连我的老板都曾开玩笑说我是“数据库奇才”。
现在他们的餐厅生意好多了,他们经常不得不在表格中添加不同的列。
有时我必须教他们添加计算列,例如“折扣后”。
他们越了解,就越兴奋。
无论哪种方式,数据库使用起来都很有趣。

请问添加列时,列名可以是中文吗?有朋友问我。
我尝试了一下,发现有些系统可以工作,有些则不能。
这取决于数据库设置。
他们的饭后添加输水柱的系统确实有效,这真的很有趣。

面试官:MySQL 给数据表增加一列,一定会锁表吗?

MySQL在添加列时不一定会锁定表,它会因版本和操作而异。
5 .6 版本添加了不加锁的非空列,8 .0版本有进一步的优化。
大量数据或复杂操作可能会被锁定。
我们建议先使用8 .0并在非高峰时段运行进行测试。