Câu trả lời ngắn gọn:Đối với MySQL <5,6 khóa là bắt buộc. Từ 5.6 trở đi và sử dụng InnoDB, khóa không bắt buộc đối với nhiều ALTER TABLE
các thao tác bao gồm thêm cột
.
Nếu bạn đang sử dụng MySQL 5.5 trở lên, nó sẽ nhận được một khóa đọc cho toàn bộ hoạt động và sau đó một khóa ghi ngắn gọn ở cuối.
Từ tài liệu MySQL cho ALTER TABLE ...
Có nghĩa là, khi thêm một cột, cột đó đọc sẽ khóa bảng trong hầu hết các thao tác, sau đó nhận một khóa ghi ở cuối.
MySQL 5.6 đã thêm DDL trực tuyến sang InnoDB giúp tăng tốc và cải thiện nhiều thứ, chẳng hạn như thay đổi bảng và chỉ mục. Việc thêm cột vào bảng sẽ không còn yêu cầu khóa bảng nữa ngoại trừ có thể có các khóa độc quyền ngắn khi bắt đầu và kết thúc hoạt động .
Nó nên xảy ra tự động, nhưng để chắc chắn, hãy đặt ALGORITHM=inplace
và LOCK=none
vào ALTER TABLE
của bạn tuyên bố.
Có một ngoại lệ ...