关于mysql合并表的详细介绍

 更新时间:2013年06月22日 17:40:12   作者:  
本篇文章是对mysql中的合并表进行了详细的分析介绍,需要的朋友参考下

mysql创建合并表和分区表有点相似,他是mysql 的一种特性,可以把多个结构相同的myisam表合并为一个虚表,存续引擎必须是merge,当从合并表中查询就像从子表中查询一样,和视图有写相似,当创建合并表时也有自己的frm和mrg 文件。
合并表创建方法
create table t3(a  int  primary key );
create table t4(a  int  primary key );
create  table mrg(a int  primary key )  union=(t3,t4)  insert_method=last;
这里需要注意,当2个子表中有相同的列时,创建合并表并不会唯一
mysql> select * from mrg;
+---+
| a |
+---+
| 1 |
| 2 |
| 2 |
| 3 |
| 4 |
+---+
5 rows in set (0.00 sec)
mysql> select * from t3;
+---+
| a |
+---+
| 1 |
| 2 |
+---+
2 rows in set (0.00 sec)
mysql> select * from t4;
+---+
| a |
+---+
| 2 |
| 3 |
| 4 |
+---+
3 rows in set (0.00 sec)
a=2的列在父表里面并不唯一即使你使用了PRIMARY  KEY 约束也一样。
insert_method=last选项有2个值,first  和 last  他说明插入值时是在第一个表还是最有一个,一般查询访问时是顺序访问union中的表顺序的。
当删除了父表,子表任然可以访问
mysql> drop table mrg;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from t3;
+---+
| a |
+---+
| 1 |
| 2 |
+---+
2 rows in set (0.00 sec);
当删除子表父表不能访问
mysql> drop table t3;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from mrg;
ERROR 1168 (HY000): Unable to open underlying table which is differently define
or of non-MyISAM type or doesn't exist;
同时如果你的子表定义不一致的话,父表能创建成功,但是不能正常访问。

合并表比非合并表含有更多的文件描述符,他的访问其实是打开了子表,所以缓存中的数据可能对应有多个文件描述符,在合并表中虽然有可能有相同的值,但是只要查询找到了第一个想要的值,查询就会停止

相关文章

  • MySQL InnoDB如何保证事务特性示例详解

    MySQL InnoDB如何保证事务特性示例详解

    这篇文章主要给大家介绍了关于MySQL InnoDB如何保证事务特性的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用MySQL具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-10-10
  • MySQL 的启动选项和系统变量实例详解

    MySQL 的启动选项和系统变量实例详解

    这篇文章主要介绍了MySQL 的启动选项和系统变量,结合实例形式详细分析了MySQL 启动选项和系统变量具体原理、功能、用法及操作注意事项,需要的朋友可以参考下
    2020-05-05
  • MySQL查询优化之查询慢原因和解决技巧

    MySQL查询优化之查询慢原因和解决技巧

    这篇文章主要介绍了MySQL查询优化之查询慢原因和解决技巧,内容讲解的很详细,有对于这方面不太懂的同学可以研究一下。
    2021-02-02
  • 详解mysql数据库增删改操作

    详解mysql数据库增删改操作

    这篇文章主要介绍了mysql数据库增删改操作,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • 数据库sql语句优化

    数据库sql语句优化

    今天小编就为大家分享一篇关于数据库sql语句优化,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • mysql server is running with the --skip-grant-tables option

    mysql server is running with the --skip-grant-tables option

    今天在mysql中新建数据库提示The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement,原来是数据中配置的--skip-grant-tables,这样安全就降低了,这个一般当忘记root密码的时候需要这样操作
    2017-07-07
  • mysql修改密码的三方法和忘记root密码的解决方法

    mysql修改密码的三方法和忘记root密码的解决方法

    这篇文章主要介绍了mysql修改密码的三方法和忘记root密码的解决方法,需要的朋友可以参考下
    2014-02-02
  • MySQL提取Json内部字段转储为数字

    MySQL提取Json内部字段转储为数字

    本文主要介绍了MySQL提取Json内部字段转储为数字,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧
    2021-07-07
  • Mysql实现全文检索、关键词跑分的方法实例

    Mysql实现全文检索、关键词跑分的方法实例

    这篇文章主要给大家介绍了关于Mysql实现全文检索、关键词跑分的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • 聊一聊MyISAM和InnoDB的区别

    聊一聊MyISAM和InnoDB的区别

    这篇文章主要介绍了聊一聊MyISAM和InnoDB的区别,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08

最新评论