美文网首页
MRG_MYISAM 存储引擎

MRG_MYISAM 存储引擎

作者: 追风骚年 | 来源:发表于2021-03-10 14:51 被阅读0次

mysql 中内置了一个 MRG_MYISAM 存储引擎,可以用来水平分表。MRG_MYISAM 引擎要求关联的子表都是 MYISAM 类型。

建立子表

CREATE TABLE `user1`  (
 `id` int(10) UNSIGNED NOT NULL,
  `name` varchar(255) NULL,
  PRIMARY KEY (`id`)
) ENGINE = MyISAM;

CREATE TABLE `user2`  (
 `id` int(10) UNSIGNED NOT NULL,
  `name` varchar(255) NULL,
  PRIMARY KEY (`id`)
) ENGINE = MyISAM;

建立大的关联表

CREATE TABLE `alluser`  (
 `id` int(10) UNSIGNED NOT NULL,
  `name` varchar(255) NULL,
  PRIMARY KEY (`id`)
) ENGINE = MRG_MYISAM UNION = (`user1`,`user2`)  INSERT_METHOD=LAST;

正常情况下我们不应该在 alluser 表中进行插入操作,如果确实有需要,可以指定 INSERT_METHOD 参数,INSERT_METHOD 可选的字段有 FIRSTLAST,表示从大表插入的时候选择哪一张小表取存储数据。

测试结果

测试插入

INSERT INTO `user1` (`id`,`name`) VALUES(1,'Jake1');  
INSERT INTO `user1` (`id`,`name`) VALUES('2','Jake2');  

INSERT INTO `user2` (`id`,`name`) VALUES(1,'Bob1');  
INSERT INTO `user2` (`id`,`name`) VALUES(1,'Bob2');  

操作子表就像操作之前的表一模一样,没有什么区别

测试查询

SELECT * FROM user1;
+----+-------+
| id | name  |
+----+-------+
|  1 | Jake1 |
|  2 | Jake2 |
+----+-------+
2 rows in set (0.00 sec)
---
SELECT * FROM user2;
+----+------+
| id | name |
+----+------+
|  1 | Bob1 |
|  2 | Bob2 |
+----+------+
2 rows in set (0.00 sec)
---

SELECT * FROM alluser;

+----+-------+
| id | name  |
+----+-------+
|  1 | Jake1 |
|  2 | Jake2 |
|  1 | Bob1  |
|  2 | Bob2  |
+----+-------+
4 rows in set (0.00 sec)

查询子表就像操作之前的表一模一样,查询总表的时候是可以查询出两个子表的数据。
并且这里是不能使用自增id的,应该在应用层生成一个全局唯一的 id。对于数据库的增加还是建议在应用层选择插入的哪一张表,但是对于删改查的时候那就非常方便了,直接操作 alluser 表即可

相关文章

网友评论

      本文标题:MRG_MYISAM 存储引擎

      本文链接:https://www.haomeiwen.com/subject/zwjwqltx.html