创建表时使用UNION

时间:2015-05-05 11:37:58

标签: mysql union

数据库-1

create table sample (
  id INT, 
  nm VARCHAR(10)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 
UNION=(for tables from another databases);

那么,当我们联合起来实际上是什么时候呢? 请解释一下,我对这种UNION感到困惑。

1 个答案:

答案 0 :(得分:1)

这看起来接近于创建merge table的语法,但它的引擎类型错误。您的语句将忽略union子句,只需创建一个新的空表。要创建merge table,您需要指定ENGINE=MERGE

14.3 The MERGE Storage Engine

  

MERGE存储引擎,也称为MRG_MyISAM引擎,是一个   收集相同的MyISAM表,可以作为一个表。

您在UNION子句中指定的表必须完全相同 - 即具有相同的索引和列规范,并且它们在每个表中的顺序必须相同。

之后,您可以查询合并表并访问构成它的所有表中的数据。

您也可以插入合并表,这是您无法对视图执行的操作:

  

您可以选择指定INSERT_METHOD选项来控制方式   插入到MERGE表中。使用FIRST或LAST的值   导致在第一个或最后一个基础表中进行插入,   分别。如果未指定INSERT_METHOD选项或指定   它的值为NO,不允许插入MERGE表   并尝试这样做会导致错误。

无论如何,如果你想要仔细阅读,doco还有其他的信息 - 我从来没有觉得需要使用这种类型的桌子。

示例:

mysql>
mysql> create table t2 (
    ->   id integer primary key auto_increment,
    ->   val char(20)
    -> ) engine=myisam;
Query OK, 0 rows affected (0.05 sec)

mysql>
mysql> insert into t1(val) values ('table1 a'), ('table1 b');
Query OK, 2 rows affected (0.01 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> insert into t2(val) values ('table2 a'), ('table2 b');
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql>
mysql>
mysql> create table mt (
    ->   id integer primary key auto_increment,
    ->   val char(20)
    -> ) engine=merge union=(t1,t2) insert_method=last;
Query OK, 0 rows affected (0.04 sec)

mysql>
mysql> select * from mt;
+----+----------+
| id | val      |
+----+----------+
|  1 | table1 a |
|  2 | table1 b |
|  1 | table2 a |
|  2 | table2 b |
+----+----------+
4 rows in set (0.00 sec)

mysql> insert into mt(val) values ('12345');
Query OK, 1 row affected (0.00 sec)

mysql> select * from mt;
+----+----------+
| id | val      |
+----+----------+
|  1 | table1 a |
|  2 | table1 b |
|  1 | table2 a |
|  2 | table2 b |
|  3 | 12345    |
+----+----------+
5 rows in set (0.01 sec)

mysql> select * from t2;
+----+----------+
| id | val      |
+----+----------+
|  1 | table2 a |
|  2 | table2 b |
|  3 | 12345    |
+----+----------+
3 rows in set (0.00 sec)