DB設定常常忘記一此筆記
Contents
在 MySQL / MariaDB 管理資料庫結構時,主鍵(PRIMARY KEY)和索引(INDEX)的新增與刪除有一些限制和注意事項,容易踩坑,在此整理記錄。
刪除主鍵(PRIMARY KEY)
刪除主鍵之前,若主鍵欄位設定了 AUTO_INCREMENT,必須先移除 AUTO_INCREMENT 屬性,否則會報錯。
|
|
刪除索引(INDEX)
刪除一般索引相對單純:
|
|
新增主鍵
若資料表目前沒有主鍵,可以直接新增:
|
|
若要新增複合主鍵:
|
|
新增索引
|
|
注意事項
- 在早期版本的 MySQL(5.x),對大型資料表執行
ALTER TABLE操作(包含新增/刪除主鍵或索引)時,MySQL 會鎖定整張表並重建,期間資料表無法寫入,影響線上服務。 - MySQL 5.6 以後引入了「Online DDL」功能,部分
ALTER TABLE操作可以在不鎖表的情況下執行,例如新增索引。 - MySQL 8.0 / MariaDB 10 以後,支援更多的 Instant DDL,許多操作不需要重建整張表,速度大幅提升。
實務建議
- 在上線環境執行結構變更前,先在測試環境驗證。
- 大型資料表建議使用
pt-online-schema-change(Percona Toolkit)或gh-ost(GitHub 開源工具)來進行無鎖表的結構變更。