我的编程空间,编程开发者的网络收藏夹
学习永远不晚

MySQL中怎么交换分区

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

MySQL中怎么交换分区

这篇文章将为大家详细讲解有关MySQL中怎么交换分区,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

交换分区的实现

1、交换分区的语法

alter table pt exchange partition p with table nt;

解释:

  • 将 分区表pt 的 分区p 和 一个普通表nt 中的数据 进行互换。

交换的前提条件:

  • 普通表nt 不为临时表,且不是分区表。

  • 表结构和分区表pt的结构一致。

  • 普通表nt 没有外键引用。

  • 普用表nt  若为非空。在MySQL5.6以及之前的版本,必须在分区的范围内;在MySQL5.7之后则可以不再其分区范围内,也依然会成功存入该分区中。

2、实验 交换分区

(1) 创建一个分区表,并插入数据

# 创建一个 分区表e CREATE TABLE e (     id INT NOT NULL,     fname VARCHAR(30),     lname VARCHAR(30) )     PARTITION BY RANGE (id) (         PARTITION p0 VALUES LESS THAN (50),         PARTITION p1 VALUES LESS THAN (100),         PARTITION p2 VALUES LESS THAN (150),         PARTITION p3 VALUES LESS THAN (MAXVALUE) );  # 向分区表e中插入几条数据 INSERT INTO e VALUES     (1669, "Jim", "Smith"),     (337, "Mary", "Jones"),     (16, "Frank", "White"),     (2005, "Linda", "Black");

(2) 创建一个和分区表e结构一致的普通表e2

# 创建一个表e2 mysql> create table e2 like e;  # 删除表e2的分区,使之成为一个普通表 mysql> alter table e2 remove partitioning;

(3) 查看表e的分区中各有多少行

mysql> select PARTITION_NAME, TABLE_ROWS     ->     FROM INFORMATION_SCHEMA.PARTITIONS     ->     WHERE TABLE_NAME = 'e'; +----------------+------------+ | PARTITION_NAME | TABLE_ROWS | +----------------+------------+ | p0             |          1 | | p1             |          0 | | p2             |          0 | | p3             |          3 | +----------------+------------+ 4 rows in set (0.00 sec)

(4) 将表e的分区p0 交换到 普通表e2中

mysql> alter table e exchange partition p0 with table e2;

(5) 查看结果

# 表e中 分区P0的数据已经没有了 mysql> SELECT PARTITION_NAME, TABLE_ROWS     ->     FROM INFORMATION_SCHEMA.PARTITIONS     ->     WHERE TABLE_NAME = 'e'; +----------------+------------+ | PARTITION_NAME | TABLE_ROWS | +----------------+------------+ | p0             |          0 | | p1             |          0 | | p2             |          0 | | p3             |          3 | +----------------+------------+ 4 rows in set (0.00 sec)  # 在表e2中有了 一条来自表e的分区p0 的数据 mysql> SELECT * FROM e2; +----+-------+-------+ | id | fname | lname | +----+-------+-------+ | 16 | Frank | White | +----+-------+-------+ 1 row in set (0.00 sec)

由此发现,表e的分区p0的数据 搬移到了 表e2中。

上面的例子,是将一个分区 和 一个普通的空表 交换,这样相当于将一个分区的数据搬移了出去,通常使用在数据的归档中。

同样,交换分区也可以 在一个分区和一个非空普通表中 发生交换,这样普通表中的数据会搬迁到指定分区,该指定分区的数据会搬迁到普通表中。如下操作:

(6) 再向分区表e的p0中添加一条数据

# 在表e中添加一条在分区p0范围内的数据 mysql> INSERT INTO e VALUES (41, "Michael", "Green");             Query OK, 1 row affected (0.05 sec)                                # 确认插入的数据确实以存放在分区p0 mysql> SELECT PARTITION_NAME, TABLE_ROWS     ->     FROM INFORMATION_SCHEMA.PARTITIONS     ->     WHERE TABLE_NAME = 'e';             +----------------+------------+              | PARTITION_NAME | TABLE_ROWS |              +----------------+------------+              | p0             |          1 |              | p1             |          0 |              | p2             |          0 |              | p3             |          3 |              +----------------+------------+              4 rows in set (0.00 sec)

(7) 执行 交换分区

mysql> alter table e exchange partition p0 with table e2;  Query OK, 0 rows affected (0.28 sec)

(8) 查看结果

# 之前把表e的p0交换到表e2的一条数据,现在又回到了表e mysql> SELECT * FROM e; +------+-------+-------+ | id   | fname | lname | +------+-------+-------+ |   16 | Frank | White |       | 1669 | Jim   | Smith | |  337 | Mary  | Jones | | 2005 | Linda | Black | +------+-------+-------+ 4 rows in set (0.00 sec)  mysql> SELECT * FROM e2; +----+---------+-------+ | id | fname   | lname | +----+---------+-------+ | 41 | Michael | Green | +----+---------+-------+ 1 row in set (0.00 sec)

由此看出,表e的p0 和 表e2 的数据做了互换!这种场景,可以在普通表数据搬移到分区表的某个分区中使用。

但是,有一点需要注意:

若普通表的数据 不在 要交换的分区范围内,上面交换分区的语法,不可以执行成功!请看下面的操作。

(9) 在普通表e2中插入一条超出表e的p0范围的数据,执行上面的交换语句

mysql> INSERT INTO e2 VALUES (51, "Ellen", "McDonald"); Query OK, 1 row affected (0.08 sec)  mysql> alter table e exchange partition p0 with table e2; ERROR 1707 (HY000): Found row that does not match the partition

在MySQL 5.6 版本中,该问题无法解决;而在MySQL 5.7.5版本中,增加了一个选项 WITHOUT VALIDATION  ,可以解决上面的报错。操作如下:

mysql> ALTER TABLE e EXCHANGE PARTITION p0 WITH TABLE e2 WITHOUT VALIDATION;  Query OK, 0 rows affected (0.02 sec)

查看结果:

# id为51的数据也存放在表e的p0中 mysql> select * from e partition(p0); +------+---------+----------+ | id   | fname   | lname    | +------+---------+----------+ |   41 | Michael | Green    | |   51 | Ellen   | McDonald |  +------+---------+----------+  mysql> SELECT * FROM e2; +----+---------+-------+ | id | fname   | lname | +----+---------+-------+ | 16 | Frank   | White | +----+---------+-------+ 1 row in set (0.00 sec)

总结

通过上述实践操作发现,MySQL 的交换分区的功能,有两种适用场景:

  1. 分区表的某个分区 和 一个空的普通表 交换,使得 分区表的该分区的数据搬移出去。

  2. 分区表的某个分区 和 一个非空普通表 交换,使得 普通表的数据搬移到分区表的指定分区中。

关于MySQL中怎么交换分区就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

MySQL中怎么交换分区

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Linux中怎么扩展交换分区

Linux中怎么扩展交换分区,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。什么是交换空间当物理内存 (RAM) 已满时,将使用 Linux 中的交换空间。当物理内存已满时,内存
2023-06-16

Ubuntu mrtg怎么交换分区

本篇内容主要讲解“Ubuntu mrtg怎么交换分区”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Ubuntu mrtg怎么交换分区”吧!Ubuntu的软件管理系统与Debian的相同,俱使用A
2023-06-16

Linux中怎么创建swap交换分区

Linux中怎么创建swap交换分区,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一、新建磁盘分区作为swap分区1.以root身份进入控制台(登录系统),输入
2023-06-13

Ubuntu 中怎么实现mrtg交换分区

这篇文章将为大家详细讲解有关Ubuntu 中怎么实现mrtg交换分区,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Ubuntu mrtg交换分区 Ubuntu mrtg切换到超级用户: su
2023-06-16

linux交换分区怎么创建

这篇文章主要介绍“linux交换分区怎么创建”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“linux交换分区怎么创建”文章能帮助大家解决问题。linux交换分区就是linux的SWAP分区,它是LI
2023-07-04

怎么增大swap交换分区

本篇内容介绍了“怎么增大swap交换分区”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!# dd if=/dev/zero of=/.swap
2023-06-10

Linux下怎么创建交换分区

本篇内容主要讲解“Linux下怎么创建交换分区”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Linux下怎么创建交换分区”吧!Linux 的交换分区(swap),或者叫内存置换空间(swap s
2023-06-27

Linux中怎么创建或扩展交换分区

Linux中怎么创建或扩展交换分区,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。如何检测当前交换分区大小通过 free & swapon 命令来检测当前的交换分区空间的大小
2023-06-16

CentOS中怎么配置swap交换区

这篇文章主要讲解了“CentOS中怎么配置swap交换区”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“CentOS中怎么配置swap交换区”吧!CentOS 作为linux世界里最稳定的服务
2023-06-10

Xen VPS下怎么添加swap交换分区

本篇内容主要讲解“Xen VPS下怎么添加swap交换分区”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Xen VPS下怎么添加swap交换分区”吧!1、进入目录 cd /var/ 2、获取25
2023-06-13

linux怎么查看交换分区使用情况

要查看Linux系统中交换分区的使用情况,可以使用`free`命令或`swapon`命令。使用`free`命令,可以查看系统中的内存和交换分区的使用情况。打开终端,输入以下命令:```free -h```该命令会显示交换分区的使用情况,包括
2023-08-18

Linux Swap交换分区介绍是怎么样的

这篇文章给大家介绍Linux Swap交换分区介绍是怎么样的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Linux Swap交换分区介绍总结Swap交换分区概念 什么是Linux swap space呢?我们先来看看
2023-06-06

linux swap交换分区(详解)

目录linux1.什么是SWAP2. swappiness调节什么3. 什么时候会进行swap操作?4. swap分区的优先级(priority)5. 启停swap6. 创建swap空间linux 1.什么是SWAP$ swapon -s
2022-06-03

H3C交换机型号区分

H3C S5500-28C-EIH3C:厂商品牌S代表交换机,如果是SR代表业务路由器第一个5代表千兆交换机,如果是3代表千兆上行,百兆下行。如果是7代表高端箱式交换机。9代表核心箱式交换机第二个5代表是三层交换还是二层,大于等于5为路由交
2023-01-31

linux系统有交换分区吗

本文小编为大家详细介绍“linux系统有交换分区吗”,内容详细,步骤清晰,细节处理妥当,希望这篇“linux系统有交换分区吗”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。linux系
2023-02-17

swap分区详解(创建swap分区,启用swap交换空间,关闭swap交换空间)

文章目录 swap分区什么是swap分区swap分区使用情况查看工具free案例 swapon 创建swap分区过程 swap分区 什么是swap分区 swap分区是指在Linux操作系统中为了提高系统运行效率
2023-08-19

编程热搜

目录