【Mysql 学习】MERGE存储引擎(一)

MERGE存储引擎(一)
MERGE表的问题
   MERGE存储引擎,也被认识为MRG_MyISAM引擎,是一个相同的可以被当作一个来用的MyISAM表的集合。“相同”意味着所有表同样的列和索引信息。你不能合并列被以不同顺序列于其中的表,没有恰好同样列的表,或有不同顺序索引的表。而且,任何或者所有的表可以用myisampack来压缩。表选项的差异,比如AVG_ROW_LENGTH, MAX_ROWS或PACK_KEYS都不重要。
   当你创建一个MERGE表之时,MySQL在磁盘上创建两个文件。文件名以表的名字开始,并且有一个扩展名来指明文件类型。一个.frm文件存储表定义,一个.MRG文件包含被当作一个来用的表的名字。这些表作为MERGE表自身,不必要在同一个数据库中。
   你可以对表的集合用SELECT, DELETE, UPDATE和INSERT。你必须对你映射到一个MERGE表的这些表有SELECT, UPDATE和DELETE 的权限。
   如果你DROP MERGE表,你仅在移除MERGE规格。底层表没有受影响。
   当你创建一个MERGE表之时,你必须指定一个UNION=(list-of-tables)子句,它说明你要把哪些表当作一个来用。如果你想要对MERGE表的插入发生在UNION列表中的第一个或最后一个表上,你可以选择地指定一个INSERT_METHOD选项。使用FIRST或LAST值使得插入被相应地做在第一或最后一个表上。如果你没有指定INSERT_METHOD选项,或你用一个NO值指定该选项。往MERGE表插入记录的试图导致错误。

下面例子说明如何创建一个MERGE表:
mysql> create table pay_2009 (
    -> id int,
    -> pay_date datetime,
    -> amount decimal(15,3),
    -> key idx_fk_id(id)
    -> ) engine=myisam;
Query OK, 0 rows affected (0.06 sec)

mysql> create table pay_2010 (
    -> id int,
    -> pay_date datetime,
    -> amount decimal(15,3),
    -> key idx_fk_id(id)
    -> ) engine=myisam;
Query OK, 0 rows affected (0.13 sec)

mysql> create table pay_all (
    -> id int,
    -> pay_date datetime,
    -> amount decimal(15,3),
    -> index (id)
    -> ) engine=merge union=(pay_2009,pay_2010) insert_method=first;
Query OK, 0 rows affected (0.09 sec)
mysql> insert into pay_2009 values(1,'2009-09-27',10000),(2,'2009-09-17',20000);
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> insert into pay_2010 values(1,'2010-09-27',10000),(2,'2010-09-17',20000);
Query OK, 2 rows affected (0.02 sec)
Records: 2  Duplicates: 0  Warnings: 0

 

mysql>
注意,一个列在MERGEN表中被索引,但没有被宣告为一个PRIMARY KEY,因为它是在更重要的MyISAM表中。这是必要的,因为MERGE表在更重要的表中的设置上强制非唯一性。

创建MERGE表之后,你可以发出把一组表当作一体来操作的查询:

mysql> select * from pay_2009;
+------+---------------------+-----------+
| id   | pay_date            | amount    |
+------+---------------------+-----------+
|    1 | 2009-09-27 00:00:00 | 10000.000 |
|    2 | 2009-09-17 00:00:00 | 20000.000 |
+------+---------------------+-----------+
2 rows in set (0.00 sec)

mysql> select * from pay_2010;
+------+---------------------+-----------+
| id   | pay_date            | amount    |
+------+---------------------+-----------+
|    1 | 2010-09-27 00:00:00 | 10000.000 |
|    2 | 2010-09-17 00:00:00 | 20000.000 |
+------+---------------------+-----------+
2 rows in set (0.00 sec)

mysql> select * from pay_all;
+------+---------------------+-----------+
| id   | pay_date            | amount    |
+------+---------------------+-----------+
|    1 | 2009-09-27 00:00:00 | 10000.000 |
|    2 | 2009-09-17 00:00:00 | 20000.000 |
|    1 | 2010-09-27 00:00:00 | 10000.000 |
|    2 | 2010-09-17 00:00:00 | 20000.000 |
+------+---------------------+-----------+
4 rows in set (0.00 sec)

mysql> insert into pay_all values(3,'2009-12-02',80000);
Query OK, 1 row affected (0.00 sec)

mysql> select * from pay_2009;
+------+---------------------+-----------+
| id   | pay_date            | amount    |
+------+---------------------+-----------+
|    1 | 2009-09-27 00:00:00 | 10000.000 |
|    2 | 2009-09-17 00:00:00 | 20000.000 |
|    3 | 2009-12-02 00:00:00 | 80000.000 |
+------+---------------------+-----------+
3 rows in set (0.00 sec)

mysql> select * from pay_2010;
+------+---------------------+-----------+
| id   | pay_date            | amount    |
+------+---------------------+-----------+
|    1 | 2010-09-27 00:00:00 | 10000.000 |
|    2 | 2010-09-17 00:00:00 | 20000.000 |
+------+---------------------+-----------+
2 rows in set (0.00 sec)

mysql> select * from pay_all;
+------+---------------------+-----------+
| id   | pay_date            | amount    |
+------+---------------------+-----------+
|    1 | 2009-09-27 00:00:00 | 10000.000 |
|    2 | 2009-09-17 00:00:00 | 20000.000 |
|    3 | 2009-12-02 00:00:00 | 80000.000 |
|    1 | 2010-09-27 00:00:00 | 10000.000 |
|    2 | 2010-09-17 00:00:00 | 20000.000 |
+------+---------------------+-----------+
5 rows in set (0.00 sec)
注意,你也可以直接从MySQL之外直接操作.MRG文件:

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22664653/viewspace-683339/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/22664653/viewspace-683339/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值