MERGE引擎的主要关键是什么?

时间:2014-11-11 16:04:12

标签: mysql

我的代码:

mysql> CREATE TABLE super (id int PRIMARY KEY NOT NULL AUTO_INCREMENT);
mysql> CREATE TABLE super2 (id int PRIMARY KEY NOT NULL AUTO_INCREMENT);

mysql> INSERT INTO super VALUES(1),(2);
mysql> INSERT INTO super2 VALUES(1),(3);

mysql> ALTER TABLE super ENGINE='MYIsam';
mysql> ALTER TABLE super2 ENGINE='MYIsam' 

然后我创建了MERGE Engine表:

mysql> CREATE TABLE super_merge (id int PRIMARY KEY NOT NULL AUTO_INCREMENT) E
INE='MERGE' UNION=(super,super2);
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT * FROM super_merge;
+----+
| id |
+----+
|  1 |
|  1 |
|  2 |
|  3 |
+----+ 

不是唯一性的规则吗?也许这是正常的。

如果不起作用,为什么要创建表字段的结构?

当我截断表super,super2然后表super_merge也是空的!

TRUNCATE TABLE super2;
mysql> SELECT * FROM super_merge;
Empty set (0.00 sec)

mysql> INSERT INTO super VALUES(1),(2);
mysql> INSERT INTO super2 VALUES(1),(3);

mysql> SELECT * FROM super_merge;
+----+
| id |
+----+
|  1 |
|  1 |
|  2 |
|  3 |

1 个答案:

答案 0 :(得分:1)

documentation of the MERGE engine

中明确提到了这一点
  

请注意,列a在基础MyISAM表中被索引为PRIMARY KEY,但在MERGE表中则没有。它被索引但不是PRIMARY KEY,因为MERGE表不能强制基础表集的唯一性。 (类似地,基础表中具有UNIQUE索引的列应该在MERGE表中编制索引,但不能作为UNIQUE索引编制索引。)

合并表实际上是两个表的联合视图,因此自然地从基础表中删除项目也将从合并表中删除这些项目(因为它们从未在合并表中开始,但只是在基础表中。)

相关问题