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

MySQL MRG_MyISAM 合並表詳解:創建、查詢、刪除行為與主鍵唯一性陷阱

     編輯:MySQL 資料庫相關知識

概念

合並表(ENGINE=MRG_MyISAM)將**結構完全相同的多個 MyISAM 表**聚合為一個虛擬表,查詢時按 UNION 列表順序依次訪問子表。

創建語法

CREATE TABLE t3 (a INT PRIMARY KEY) ENGINE=MyISAM;
CREATE TABLE t4 (a INT PRIMARY KEY) ENGINE=MyISAM;

CREATE TABLE mrg (a INT PRIMARY KEY) ENGINE=MRG_MyISAM
UNION=(t3,t4) INSERT_METHOD=LAST;
  • INSERT_METHOD:FIRST(插入第一張子表)、LAST(最後一張)、NO(禁止插入)。

查詢行為

INSERT INTO t3 VALUES (1),(2);
INSERT INTO t4 VALUES (2),(3),(4);

SELECT * FROM mrg;
+---+
| a |
+---+
| 1 |
| 2 |
| 2 |   -- 重複值!合並表**不保證主鍵唯一**
| 3 |
| 4 |
+---+

即使子表各自主鍵唯一,合並表**不強制全局唯一**,查詢到第一個匹配行即返回(LIMIT 1 時尤顯)。

刪除影響

  • DROP TABLE mrg; — 僅刪除 .frm/.MRG 定義文件,**子表 t3/t4 完好無損**,可繼續獨立訪問。
  • DROP TABLE t3; — 子表刪除後,**合並表 mrg 查詢報錯**:ERROR 1168: Unable to open underlying table。

適用場景與限制

優點缺點/限制
邏輯分表(如按月/地區),應用層無感查詢全量僅支援 MyISAM 子表
避免大表單表性能瓶頸不支援主鍵/唯一鍵全局約束
單獨備份/歸檔子表極簡單無法建立外鍵、觸發器
可用 REPLACE/INSERT_METHOD 控制寫入路由5.7+ 推薦用分區表替代
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved