数据库-1
create table sample (
id INT,
nm VARCHAR(10)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
UNION=(for tables from another databases);
那么,当我们联合起来实际上是什么时候呢?
请解释一下,我对这种UNION
感到困惑。
答案 0 :(得分:1)
这看起来接近于创建merge table
的语法,但它的引擎类型错误。您的语句将忽略union子句,只需创建一个新的空表。要创建merge table
,您需要指定ENGINE=MERGE
。
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)