我的代码:
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 |
答案 0 :(得分:1)
documentation of the MERGE engine:
中明确提到了这一点请注意,列
a
在基础MyISAM表中被索引为PRIMARY KEY
,但在MERGE表中则没有。它被索引但不是PRIMARY KEY
,因为MERGE表不能强制基础表集的唯一性。 (类似地,基础表中具有UNIQUE
索引的列应该在MERGE表中编制索引,但不能作为UNIQUE
索引编制索引。)
合并表实际上是两个表的联合视图,因此自然地从基础表中删除项目也将从合并表中删除这些项目(因为它们从未在合并表中开始,但只是在基础表中。)