CREATE TABLE `t1` (
`a` int(11) NOT NULL auto_increment,
`message` char(20) default NULL,
PRIMARY KEY (`a`)
) ENGINE=MyISAM ;
CREATE TABLE `t2` (
`a` int(11) NOT NULL auto_increment,
`message` char(20) default NULL,
PRIMARY KEY (`a`)
) ENGINE=MyISAM ;
CREATE TABLE t (a INT NOT NULL ,message CHAR(20) ) ENGINE=MRG_MyISAM UNION=(`t1`,`t2`)
当增删改t1,t2时候,t表会同步
CREATE TABLE `yc_tessss_0` (
`id` int(11) NOT NULL auto_increment,
`username` varchar(60) NOT NULL default '',
`money` double NOT NULL default '0',
`entertime` int(11) NOT NULL default '0',
`ip` varchar(15) default NULL,
`mflag` tinyint(1) NOT NULL default '-1',
`remark` varchar(255) NOT NULL default '',
`m_orderid` varchar(100) NOT NULL default '',
`restmoney` double NOT NULL default '0',
`state` tinyint(1) NOT NULL default '1',
`fangan_id` int(10) NOT NULL default '0',
`prize_money` double NOT NULL default '0',
`auto_buy` tinyint(1) unsigned NOT NULL default '0',
`csm_where` int(10) unsigned NOT NULL default '0',
`uid` int(10) unsigned NOT NULL default '0',
`bocai_tag` varchar(255) default '',
`cold_money` float default NULL,
`loty_name` char(32) default NULL,
`play_name` char(32) default NULL,
`loty_id` int(11) default NULL,
`play_id` int(11) default NULL,
`project_no` char(32) default NULL,
`order_id` char(32) default NULL,
`trade_type` int(11) default NULL,
`prize_time_limit` int(11) default NULL,
`record_state` int(11) default NULL,
`record_flag` int(11) default NULL,
`busi_sn` char(32) default NULL,
`party_id` int(11) default NULL,
`standby1` int(11) default NULL,
`standby2` float default NULL,
`standby3` float default NULL,
`standby4` char(64) default NULL,
`standby5` char(255) default NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `m_orderid_2` (`m_orderid`),
KEY `entertime` (`entertime`),
KEY `flag_index` (`mflag`),
KEY `username` (`username`),
KEY `uid` (`csm_where`),
KEY `prize_time_limit` (`prize_time_limit`),
KEY `uid2` (`uid`)
) ENGINE=MyISAM CHARSET=gbk
CREATE TABLE `yc_tessss` (
`id` int(11) NOT NULL,
`username` varchar(60) NOT NULL default '',
`money` double NOT NULL default '0',
`entertime` int(11) NOT NULL default '0',
`ip` varchar(15) default NULL,
`mflag` tinyint(1) NOT NULL default '-1',
`remark` varchar(255) NOT NULL default '',
`m_orderid` varchar(100) NOT NULL default '',
`restmoney` double NOT NULL default '0',
`state` tinyint(1) NOT NULL default '1',
`fangan_id` int(10) NOT NULL default '0',
`prize_money` double NOT NULL default '0',
`auto_buy` tinyint(1) unsigned NOT NULL default '0',
`csm_where` int(10) unsigned NOT NULL default '0',
`uid` int(10) unsigned NOT NULL default '0',
`bocai_tag` varchar(255) default '',
`cold_money` float default NULL,
`loty_name` char(32) default NULL,
`play_name` char(32) default NULL,
`loty_id` int(11) default NULL,
`play_id` int(11) default NULL,
`project_no` char(32) default NULL,
`order_id` char(32) default NULL,
`trade_type` int(11) default NULL,
`prize_time_limit` int(11) default NULL,
`record_state` int(11) default NULL,
`record_flag` int(11) default NULL,
`busi_sn` char(32) default NULL,
`party_id` int(11) default NULL,
`standby1` int(11) default NULL,
`standby2` float default NULL,
`standby3` float default NULL,
`standby4` char(64) default NULL,
`standby5` char(255) default NULL,
KEY `id` (`id`),
KEY `m_orderid_2` (`m_orderid`),
KEY `entertime` (`entertime`),
KEY `flag_index` (`mflag`),
KEY `username` (`username`),
KEY `uid` (`csm_where`),
KEY `prize_time_limit` (`prize_time_limit`),
KEY `uid2` (`uid`)
) ENGINE=MRG_MyISAM CHARSET=gbk UNION=(`yc_tessss_0`,`yc_tessss_1`,`yc_tessss_2`,`yc_tessss_3`,`yc_tessss_4`,`yc_tessss_5`,`yc_tessss_6`,`yc_tessss_119`)
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表:
CODE:
mysql> CREATE TABLE t1 (
-> a INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> message CHAR(20));
mysql> CREATE TABLE t2 (
-> a INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> message CHAR(20));
mysql> INSERT INTO t1 (message) VALUES ('Testing'),('table'),('t1');
mysql> INSERT INTO t2 (message) VALUES ('Testing'),('table'),('t2');
mysql> CREATE TABLE total (
-> a INT NOT NULL AUTO_INCREMENT,
-> message CHAR(20), INDEX(a))
-> TYPE=MERGE UNION=(t1,t2) INSERT_METHOD=LAST;注意,一个列在MERGEN表中被索引,但没有被宣告为一个PRIMARY KEY,因为它是在更重要的MyISAM表中。这是必要的,因为MERGE表在更重要的表中的设置上强制非唯一性。
创建MERGE表之后,你可以发出把一组表当作一体来操作的查询:
CODE:
mysql> SELECT * FROM total;
+---+---------+
| a | message |
+---+---------+
| 1 | Testing |
| 2 | table |
| 3 | t1 |
| 1 | Testing |
| 2 | table |
| 3 | t2 |
有关于Mysql的MERGE表类型
#
他将多个表在逻辑上当作一个表来查询。他建立后有两个文件,
.frm 表结构定义
.mrg union表的名字清单
两个基本表:
CREATE TABLE TEST_MERGE_1(
ID INT(5) NOT NULL,
VALUE VARCHAR(100) NOT NULL,
PRIMARY KEY(ID)
)
CREATE TABLE TEST_MERGE_2(
ID INT(5) NOT NULL,
VALUE VARCHAR(100) NOT NULL,
PRIMARY KEY(ID)
)
MERGE表的建立:
CREATE TABLE TEST_MERGE(
ID INT(5) NOT NULL,
VALUE VARCHAR(100) NOT NULL,
PRIMARY KEY(ID)
) TYPE=MERGE UNION=(TEST_MERGE_1,TEST_MERGE_2) INSERT_METHOD=LAST;
1. 此表类似于SQL中的union机制。
2. 此表结构必须和基本表完全一致,包括列名、顺序。UNION表必须同属一个DATABASE。
3. 基本表类型必须是MyISAM。
4. 能通过修改.mrg文件来修改MERGE表,每个基本表的名字占一行。注意:修改后要通过FLUSH TABLES刷新表缓存。
5. 对基本表的更改能直接反映在此表上。
6. INSERT_METHOD的取值能是: 0 不允许插入 FIRST 插入到UNION中的第一个表 LAST 插入到UNION中的最后一个表。(4.0之后可用)
7. 定义在他上面的约束没有所有作用,约束是由基本表控制的,例如两个基本表中存在着同样的一个Key值,那么在MERGE表中会有两个相同的Key值。
#
>DROP TABLE `yc_tessss_test`;
>delimiter //
>CREATE TABLE IF NOT EXISTS `yc_tessss_test` (
`id` int(11) NOT NULL auto_increment,
`username` varchar(60) NOT NULL default '',
`money` double NOT NULL default '0',
`entertime` int(11) NOT NULL default '0',
`ip` varchar(15) default NULL,
`mflag` tinyint(1) NOT NULL default '-1',
`remark` varchar(255) NOT NULL default '',
`m_orderid` varchar(100) NOT NULL default '',
`restmoney` double NOT NULL default '0',
`state` tinyint(1) NOT NULL default '1',
`fangan_id` int(10) NOT NULL default '0',
`prize_money` double NOT NULL default '0',
`auto_buy` tinyint(1) unsigned NOT NULL default '0',
`uid` int(10) unsigned NOT NULL default '0',
`csm_where` int(10) unsigned NOT NULL default '0',
`bocai_tag` varchar(255) default NULL,
`cold_money` float default NULL,
`loty_name` char(32) default NULL,
`play_name` char(32) default NULL,
`loty_id` int(11) default NULL,
`play_id` int(11) default NULL,
`project_no` char(32) default NULL,
`order_id` char(32) default NULL,
`trade_type` int(11) default NULL,
`prize_time_limit` int(11) default NULL,
`record_state` int(11) default NULL,
`record_flag` int(11) default NULL,
`busi_sn` char(32) default NULL,
`party_id` int(11) default NULL,
`standby1` int(11) default NULL,
`standby2` float default NULL,
`standby3` float default NULL,
`standby4` char(64) default NULL,
`standby5` char(255) default NULL,
PRIMARY KEY (`id`)
) TYPE=MERGE UNION=(yc_tessss_1,yc_tessss_2) INSERT_METHOD=LAST;
>//
--------------???????????????????? Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist
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表:
CODE:
mysql> CREATE TABLE t1 (
-> a INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> message CHAR(20));
mysql> CREATE TABLE t2 (
-> a INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> message CHAR(20));
mysql> INSERT INTO t1 (message) VALUES ('Testing'),('table'),('t1');
mysql> INSERT INTO t2 (message) VALUES ('Testing'),('table'),('t2');
mysql> CREATE TABLE total (
-> a INT NOT NULL AUTO_INCREMENT,
-> message CHAR(20), INDEX(a))
-> TYPE=MERGE UNION=(t1,t2) INSERT_METHOD=LAST;注意,一个列在MERGEN表中被索引,但没有被宣告为一个PRIMARY KEY,因为它是在更重要的MyISAM表中。这是必要的,因为MERGE表在更重要的表中的设置上强制非唯一性。
创建MERGE表之后,你可以发出把一组表当作一体来操作的查询:
CODE:
mysql> SELECT * FROM total;
+---+---------+
| a | message |
+---+---------+
| 1 | Testing |
| 2 | table |
| 3 | t1 |
| 1 | Testing |
| 2 | table |
| 3 | t2 |