Introduction to VPS and Web Technology Development

mysql merge实现分表

自由vps 数据库

mysql 的MyISAM存储引擎使用虚表跟表组对指定的表组进行联合查询的操作

实现步骤

1.创建多个子表 用于存储数据

CREATE TABLE `t1` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(100) CHARACTER SET latin1 DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
CREATE TABLE `t2` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(100) CHARACTER SET latin1 DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
CREATE TABLE `t3` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(100) CHARACTER SET latin1 DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

2.多表联合

CREATE TABLE `mergetable` (
  `id` int(11) NOT NULL,
  `name` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MRG_MyISAM DEFAULT CHARSET=latin1 INSERT_METHOD=LAST UNION=(`t1`,`t2`,`t2`);


注意 INSERT_METHOD=LAST UNION=(`t1`,`t2`,`t3`)  这是关键

INSERT_METHOD只有LAST 和FIRST  也就是表的插入方向是限定的 


操作 :

从mergetable插入操作

INSERT into  mergetable(`name`)VALUES(30)

经过查看 发现数据插入到了t3和mergetable


使用explain查看

EXPLAIN INSERT into  mergetable(`name`)VALUES(30)

结果

1	INSERT	mergetable		ALL							

可以发现 插入是在数据库层面做的 不是在sql这一层

接下来 我们换个方式 从子表插入 看看mergetable的数据变化

INSERT into t1(`name`)VALUES(1000)

发现t1和mergetable都多了一条数据 

也就是 子表跟mergetable是双向数据绑定的子父子集合关系

子表的id在mergetable不具有唯一性 需要通过使用其其他手段进行唯一性控制

使用chatGPT寻求答案
标签: 暂无标签

免责声明:

本站提供的资源,都来自网络,版权争议与本站无关,所有内容及软件的文章仅限用于学习和研究目的。不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负,我们不保证内容的长久可用性,通过使用本站内容随之而来的风险与本站无关,您必须在下载后的24个小时之内,从您的电脑/手机中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。侵删请致信E-mail:master@freevpsweb.com

同类推荐
评论列表