对分区表进行alter-switch时遇到的错误
创建一个和目标表一样定义的表;
在表上加上constraint以确保表的数据在目标分区里;
Alter table 源表 switch to 目标表 partition 分区号
其中分区号可以通过$partition.partion_func( column value)获得
这个过程比insert select要快很多,因为不涉及到io,只需要修改元数据,该边partition的onwer而已。
但是上述过程只适用于目标表的分区函数中目标分区已存在的情况。比如你定义了边界为1,2,3的分区函数,那么4和5都会插入到第4个分区里。
所以我推荐使用这种提前定义好分区函数所有分区的方法,如果你要按天分区,你就先定义好1000个分区。这种方法比较简单,不需要在加入数据时进行检查,从而导致错误。
如果您一定要使用动态分区的话,在加入一个源表作为新的分区时,需要如下操作:
首先取得新加入的分区列的值,设为X;
通过sys.Partition_range_values和sys.partition_functions找到目标分区函数所有的边界值;
进行如下的检查:
在这里分界值属于左边分区还是右边分区是有区别的,我们假设属于左边分区;
如果X存在于2步的边界值集合中,那么恭喜你,不需做额外的操作;
如果X大于2步中最大的边界,你不仅需要为X分裂出一个分区,还要保证小于X的数据都有自己分区。
每次加入分区时检查已有的边界值,如果不等于其中的任何一个,则以X为参数split, 并删除目标表中分区列和X相同的数据。
像之前描述的步骤那样switch源表到目标分区中。
如果在2步的时候,目标分区已经存在数据,alter ...switch语句就会失败,原因是目标分区不为空。
可以理解为,switch操作是修改表的元数据,用新的分配单元替换原来的分配单元。如果原来的分配单元不为空,那么这次替换就会造成一些数据的丢失,从而破坏了数据的完整性,因此是不允许的。
相关推荐
-
MySQL中的alter table命令的基本使用方法及提速优化
一.基本用法 1. 增加列 alter table tbl_name add col_name type 例如, 给pet的表增加一列 weight, mysql>alter table pet add weight int; 2. 删除列 alter table tbl_name drop col_name 例如, 删除pet表中的weight这一列 mysql>alter table pet drop weight; 3. 改变列 分为改变列的属性和改变列的名字 改变列的属性--方法1:
-
MySQL ALTER命令使用详解
ALTER TABLE允许你修改一个现有表的结构.例如,你可以增加或删除列.创造或消去索引.改变现有列的类型.或重新命名列或表本身.你也能改变表的注释和表的类型. 你可以使用CHANGE old_col_name create_definition子句重命名一个列.为了这样做,指定旧的和新的列名字和列当前有的类型.例如,重命名一个INTEGER列,从a到b,你可以这样做: mysql> ALTER TABLE t1 CHANGE a b INTEGER; 如果你想要改变列的类型而非名字,就算他们
-
MySql数据库之alter表的SQL语句集合
mysql之alter表的SQL语句集合,包括增加.修改.删除字段,重命名表,添加.删除主键等. 1:删除列 ALTER TABLE [表名字] DROP [列名称] 2:增加列 ALTER TABLE [表名字] ADD [列名称] INT NOT NULL COMMENT '注释说明' 3:修改列的类型信息 ALTER TABLE [表名字] CHANGE [列名称][新列名称(这里可以用和原来列同名即可)] BIGINT NOT NULL COMMENT '注释说明' 4:重命名列 ALT
-
AlternatingItemTemplate类似于 ItemTemplate 元素
DataList Web 服务器控件 通过使用模板显示数据源中的项.通过操作组成 DataList 控件的不同组件的模板(如 ItemTemplate 和 HeaderTemplate),可以自定义该控件的外观和内容. <asp:DataList id="DataList1" CellPadding="pixels" CellSpacing="pixels" DataKeyField="DataSou
-
mysql alter语句用法实例
//主键 ALTER TABLE tablename add new_field_id int(5) UNSIGNED DEFAULT 0 NOT NULL anto_increment,ADD PRIMARY KEY (new_field_id); //增加一个新列 mysql>ALTER TABLE tablename ADD fieldname fieldtype 如: ALTER TABLE t2 ADD d TIMESTAMP; ALTER TABLE infos ADD ex TIN
-
MySQL 数据库 ALTER命令讲解
MySQL 为关系型数据库(Relational Database Management System), 这种所谓的"关系型"可以理解为"表格"的概念, 一个关系型数据库由一个或数个表格组成. 当我们需要修改数据表名或者修改数据表字段时,就需要使用到MySQL ALTER命令. 开始本章教程前让我们先创建一张表,表名为:testalter_tbl. root@host# mysql -u root -p password; Enter password:*****
-
MySQL ALTER语法的运用方法
以下的文章主要介绍的是MySQL ALTER语法的实际运用,我们大家都知道MySQL ALTER语法在实际应用中的比例还是很大的,所以了解一下MySQL ALTER语法的实际运用可以很好的选择. MySQL ALTER语法中ALTER [IGNORE] TABLE tbl_name alter_spec [, alter_spec ...] 复制代码 代码如下: alter_specification: ADD [COLUMN] create_definition [FIRST | AFTER
-
ORACLE 修改表结构 之ALTER CONSTAINTS的使用
1,创建联合主键 ALTER TABLE 表名 ADD CONSTRAINTS 结束名 PRIMARY KEY (列名,列名..); 2,新增字符 ALTER TABLE 表名 ADD (COLUMN DATATYPE [DEFAULT VALUE][NULL/NOT NULL]); 3,删除列 ALTER TABLE 表名 DROP (COLUMN)J; 4,修改表的字符 ALTER TABLE 表名 MODIFY (COLUMN DATATYPE [DEFAULT VALUE][NULL/N
-
MySQL学习笔记5:修改表(alter table)
我们在创建表的过程中难免会考虑不周,因此后期会修改表修改表需要用到alter table语句 修改表名 复制代码 代码如下: mysql> alter table student rename person; Query OK, 0 rows affected (0.03 sec) 这里的student是原名,person是修改过后的名字 用rename来重命名,也可以使用rename to 修改字段的数据类型 复制代码 代码如下: mysql> alter table person modi
-
详解MySQL中ALTER命令的使用
MySQL的ALTER命令是非常有用的,当想改变表的名称,表的字段,或者如果要添加或删除一个现有的表中的列. 让我们开始创建一个表名为testalter_tbl的用例: root@host# mysql -u root -p password; Enter password:******* mysql> use TUTORIALS; Database changed mysql> create table testalter_tbl -> ( -> i INT, -> c C
随机推荐
- 详解 vue.js用法和特性
- Bootstrap3 图片(响应式图片&图片形状)
- 浅谈Javascript数组(推荐)
- asp.net实现取消页面表单内文本输入框Enter响应的方法
- 用Jquery访问WebService并返回Json的代码第1/3页
- Android实现Service重启的方法
- PHP创建文件,并向文件中写入数据,覆盖,追加的实现代码
- php中header跳转使用include包含解决参数丢失问题
- 也谈php网站在线人数统计
- JavaScript数组方法大全(推荐)
- ImageMagickObject获取图片的信息无返回值的解决办法
- RedHat下MySQL的基本使用方法分享
- 刀片服务器五大误区解读
- 基于jquery实现省市区三级联动效果
- jQuery Flash/MP3/Video多媒体插件
- javascript写的日历类(基于pj)
- C#实现十五子游戏
- PHP实现链式操作的原理详解
- winform实现限制及解除鼠标移动范围的方法
- 在当前Activity之上创建悬浮view之WindowManager悬浮窗效果