回答
简短回答:对于MySQL <需要5.6个锁。从5.6开始,使用InnoDB,locks are not required for many ALTER TABLE
operations including adding a column。
如果你使用MySQL 5.5或以上,将获得在结束整个操作读锁,然后一个简短的写锁。
From the MySQL documentation for ALTER TABLE ...
在大多数情况下,ALTER TABLE使得原始表的临时副本...虽然ALTER TABLE执行时,原始表是由其他会话(可读但很快就会有例外)。对ALTER TABLE操作开始之后开始的表进行更新和写操作将被停止,直到新表准备好为止......
前面提到的异常是ALTER TABLE块在它所在的位置读取(不只是写入)准备安装表格.frm文件的新版本,放弃旧文件,并从表格和表格定义缓存中清除过时的表格结构。此时,它必须获得排他锁。
也就是说,当添加一个列时,它会锁定大部分操作的表,然后在最后得到一个写锁。
的MySQL 5.6添加Online DDL InnoDB的这加速了,提高了许多东西,如改变表和索引。向列添加列将不再需要表锁except brief exclusive locks at the start and end of the operation。
它应该自动发生,但可以肯定的一套ALGORITHM=inplace
和LOCK=none
您ALTER TABLE
声明。
有一个例外...的MySQL 5.6之前创建不支持ALTER TABLE ...算法= INPLACE对于包括时间列(DATE,DATETIME或TIMESTAMP),并没有表
InnoDB表使用ALTER TABLE ... ALGORITHM = COPY重建。
- 1. 表[表名]没有锁定
- 2. InnoDB表优化没有锁定表
- 3. MySql - 表'过程'没有锁定锁定表
- 4. Sql合并锁定整个目标表
- 5. 锁定整个表存储过程
- 6. 将一个表锁锁定行锁定
- 7. 仅在修改vs整个方法时锁定
- 8. 修改的列表,在做内锁()
- 9. MySQL的:锁定表,但没有开放
- 10. Tomcat的:没有修改被允许锁定parameterMap的
- 11. mssql如何在没有选择语句的情况下锁定整个表?
- 12. fabricjs:IText锁修改
- 13. 如何修改一个没有空值的表格
- 14. 一个列表变空了而没有在java中修改它
- 15. 当我修改表时,MySQL Workbench没有显示列表
- 16. 内部表格没有从表格控件中修改
- 17. 没有这样的表..当我在android eclipse中修改表
- 18. 修改表与多个修改VS修改表查询列单柱
- 19. MySQL“锁定”一个表项
- 20. 合并:修改多个表
- 21. SQL Server,插入一行锁整个表
- 22. 有没有办法修改一个不可修改的集合?
- 23. ReentrantLock.tryLock()没有锁定
- 24. 插入查询锁定了整个DB和没有响应
- 25. MySQL表锁定
- 26. MySQL锁定表
- 27. MySQL锁定表
- 28. transactionscope锁定表
- 29. 光标没有通过整个表
- 30. 循环没有贯穿整个表