MySQL 给数据表增加一列,一定会锁表吗?

2024-11-21 杜世伟 Mysql

在 MySQL 中,给数据表增加一列(ALTER TABLE 操作)是否会锁表,取决于以下几个因素:

1. 存储引擎
InnoDB:这是 MySQL 默认的事务性存储引擎,从 MySQL 5.6 开始,InnoDB 支持在线 DDL(Online DDL),在某些情况下可以避免完全锁表。

MyISAM:这种存储引擎不支持在线 DDL,因此会对表进行完全锁定。


2. ALTER TABLE 的具体操作
不同的操作对锁表的影响不同:
新增列:简单的增加一个不带默认值或允许 NULL 的列,InnoDB 通常支持在线 DDL,可以避免锁表。
新增列并带有默认值:如果需要对现有数据进行填充(例如新增列设置了非空约束且有默认值),可能会触发对表中每一行的更新,此时通常会锁表。

新增列并影响索引:如果新增的列涉及索引或主键,也可能导致表锁。

阅读全文>>

标签: mysql InnoDB lock ddl

评论(0) 浏览(954)

Powered by emlog 沪ICP备2023034538号-1