2011-10-10 46 views
1

我們有MERGE存儲引擎的MYSQL表,它合併來自40個表(「表01」到「表40」)的數據。一旦我們運行一個SELECT查詢,我們就可以從所有合併的MySQL表中獲取所有條目。 MERGE表的結構和行爲如預期。在MySQL MERGE存儲引擎中標識成員表

但是它發生,我們需要確定合併錶行條目來自何方或對應於合併表,即

  • 行rowA => 「table01
  • rowB中=>「表12
  • ROWC =>」 表12
  • rowD =>」 table35
  • 羅=>」 table39
  • 行... =>」 表...

有沒有辦法做到這一點與MySQL MERGE存儲引擎?

回答

0

不那麼優雅,但你可以在每個表上添加一個標識整數列,指定該列的默認值爲1,2(取決於它是哪個表 - 你甚至可以查找查找表(tableId - >表名),然後你應該能夠分辨哪個表給定行來到

你不得不做出MERGE表太當然同樣的變化...

精心撕開關閉MERGE MySQL docs

CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY,message CHAR(20)) ENGINE=MyISAM; 

CREATE TABLE t2 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY,message CHAR(20)) ENGINE=MyISAM; 

INSERT INTO t1 (message) VALUES ('Testing'),('table'),('t1'); 
INSERT INTO t2 (message) VALUES ('Testing'),('table'),('t2'); 

CREATE TABLE total (a INT NOT NULL AUTO_INCREMENT,message CHAR(20),INDEX(a)) ENGINE=MERGE UNION=(t1,t2) INSERT_METHOD=LAST; 

alter table t1 add column identifier int unsigned not null default 1; 
alter table t2 add column identifier int unsigned not null default 2; 

drop table total; 

CREATE TABLE total (a INT NOT NULL AUTO_INCREMENT,message CHAR(20),identifier int unsigned,INDEX(a)) ENGINE=MERGE UNION=(t1,t2) INSERT_METHOD=LAST; 

雖然你可以改變所有的40個表格,但它的工作相當遲鈍...

+2

只需注意一下,使用整數而不是字符串的效率通常會更好。 –

+0

好點!將相應地編輯。 –