woaidongmao

文章均收录自他人博客,但不喜标题前加-[转贴],因其丑陋,见谅!~
随笔 - 1469, 文章 - 0, 评论 - 661, 引用 - 0
数据加载中……

另外在说一个大表分成若干小表的功能

MERGE存储引擎,也被认识为MRG_MyISAM引擎,是一个相同的可以被当作一个来用的MyISAM表的集合。“相同”意味着所有表同样的列和索引信息。你不能合并列被以不同顺序列于其中的表,没有恰好同样列的表,或有不同顺序索引的表。而且,任何或者所有的表可以用myisampack来压缩的.
当你创建一个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表:

  1. mysql> CREATE TABLE t1 (
  2.     ->    a INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  3.     ->    message CHAR(20));
  4. mysql> CREATE TABLE t2 (
  5.     ->    a INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  6.     ->    message CHAR(20));
  7. mysql> INSERT INTO t1 (message) VALUES ('Testing'),('table'),('t1');
  8. mysql> INSERT INTO t2 (message) VALUES ('Testing'),('table'),('t2');
  9. mysql> CREATE TABLE total (
  10.     ->    a INT NOT NULL AUTO_INCREMENT,
  11.     ->    message CHAR(20), INDEX(a))
  12.     ->    TYPE=MERGE UNION=(t1,t2) INSERT_METHOD=LAST;

复制代码

注意,一个列在MERGEN表中被索引,但没有被宣告为一个PRIMARY KEY,因为它是在更重要的MyISAM表中。这是必要的,因为MERGE表在更重要的表中的设置上强制非唯一性。
创建MERGE表之后,你可以发出把一组表当作一体来操作的查询:

  1. mysql> SELECT * FROM total;
  2. +---+---------+
  3. | a | message |
  4. +---+---------+
  5. | 1 | Testing |
  6. | 2 | table   |
  7. | 3 | t1      |
  8. | 1 | Testing |
  9. | 2 | table   |
  10. | 3 | t2      |

复制代码

[ 本帖最后由 forest 于 2007-4-5 18:04 编辑 ]

成功就是成为最好的你自己!

posted on 2009-06-09 13:39 肥仔 阅读(252) 评论(0)  编辑 收藏 引用 所属分类: 数据库


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理