首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL CREATE INDEX 無法建主鍵:必須用 ALTER TABLE,附索引鍵長度引擎差異

     編輯:MySQL 資料庫相關知識

結論:CREATE INDEX 不能創建主鍵,必須用 ALTER TABLE tbl ADD PRIMARY KEY (col) 或建表時 PRIMARY KEY (col)。

索引鍵最大有效長度(按字節)

引擎默認限制開啟 innodb_large_prefix 後
MyISAM1000 字節—
InnoDB767 字節3072 字節(需 ROW_FORMAT=DYNAMIC/COMPRESSED + innodb_file_per_table=ON)

實測驗證

-- InnoDB 767 字節邊界
CREATE TABLE t (c VARCHAR(255) CHARSET utf8mb4, INDEX idx_c(c(255)));  -- 255*4=1020 > 767 → 報錯
CREATE TABLE t (c VARCHAR(255) CHARSET utf8mb4, INDEX idx_c(c(191)));  -- 191*4=764 ✓

-- 開啟 large_prefix 後
SET GLOBAL innodb_large_prefix=ON;
CREATE TABLE t (c VARCHAR(255) CHARSET utf8mb4, INDEX idx_c(c(255))) ROW_FORMAT=DYNAMIC;  -- ✓

最佳實踐

  • 新建表默認 ROW_FORMAT=DYNAMIC + innodb_large_prefix=ON(MySQL 5.7.7+ 默認開啟)。
  • 字符集統一 utf8mb4,前綴長度按「字符數」計算,留 10% 餘量。
  • 主鍵盡量用無業務含義的 BIGINT AUTO_INCREMENT 或 UUID_TO_BIN(),避免業務字段變長導致二級索引膨脹。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved