是否
ALTER TABLE sample ADD COLUMN `hasItem` tinyint(1) DEFAULT NULL
Run Code Online (Sandbox Code Playgroud)
锁定整个桌子?
Sch*_*ern 62
简短回答:对于MySQL <5.6需要锁定.从5.6开始,使用InnoDB,许多ALTER TABLE操作(包括添加列)不需要锁.
如果您使用的是MySQL 5.5或更早版本,它将获得整个操作的读锁定,然后在结尾处进行简短的写锁定.
在大多数情况下,ALTER TABLE生成原始表的临时副本...当ALTER TABLE正在执行时,原始表可由其他会话读取(不久之后会注明).对ALTER TABLE操作开始后开始的表的更新和写入将停止,直到新表准备好...
前面提到的异常是ALTER TABLE块在准备好安装表.frm文件的新版本,丢弃旧文件以及从表和表中清除过时的表结构时读取(而不仅仅是写入)定义缓存.此时,它必须获得独占锁.
也就是说,当添加一个列时,它会读取大部分操作的表,然后在结尾处获得一个写锁.
MySQL 5.6将在线DDL添加到InnoDB中,可以加速和改进许多内容,例如更改表和索引.向表中添加列将不再需要表锁,除了操作开始和结束时的简短排它锁.
它应该自动发生,但要确保设置ALGORITHM=inplace和LOCK=none你的ALTER TABLE陈述.
有一个例外......
在MySQL 5.6之前创建的InnoDB表不支持ALTER TABLE ... ALGORITHM = INPLACE用于包含时间列(DATE,DATETIME或TIMESTAMP)的表,并且尚未使用ALTER TABLE ... ALGORITHM = COPY重建.
| 归档时间: |
|
| 查看次数: |
28095 次 |
| 最近记录: |