MYSQL定时创建表分区

一.存储过程-表分区
-----------------------------------------------------------------
需求:
每月创建一个分区
分区名名称格式:p201201,p201202……
------------------------------------------

 1 CREATE DEFINER = `root`@`%` PROCEDURE `Auto_Create_Partition`(IN `databaseName` varchar(50),IN `tableName` varchar(50))
 2 L_END:BEGIN
 3 # 初始化变量
 4 DECLARE MAX_PARTITION_DESCRIPTION VARCHAR(255) DEFAULT 0;
 5 DECLARE P_DESCRIPTION VARCHAR(255) DEFAULT 0;
 6 DECLARE i INT DEFAULT 1;
 7 DECLARE ISEXIST_PARTITION VARCHAR(255) DEFAULT 0;
 8 DECLARE next_p_name varchar(255) DEFAULT 0;
 9 # 查询表分区    最近的一个月的分区(ORDER BY partition_description DESC LIMIT 1)
10 SELECT PARTITION_NAME INTO ISEXIST_PARTITION FROM information_schema.PARTITIONS WHERE TABLE_SCHEMA = databaseName AND TABLE_NAME = tableName ORDER BY partition_description DESC LIMIT 1 ;
11
12 IF ISEXIST_PARTITION <=> "" THEN
13 SELECT "Partition table not is exist" AS "*****ERROR*****";
14 LEAVE L_END;
15 END IF;
16
17 # 根据时间设置要创建的分区的名称
18 SELECT concat(‘p‘,DATE_FORMAT(DATE_ADD(NOW(),INTERVAL 1 MONTH),‘%Y%m‘)) INTO next_p_name;
19
20 # 判断要创建的分区是否存在
21 IF ISEXIST_PARTITION = next_p_name THEN
22 SELECT concat("Partition(",next_p_name,") is exist") AS "*****INFO*****";
23 LEAVE L_END;
24 END IF;
25
26 # 最近一个分区的设置的最大值(右边界)
27 SELECT partition_description INTO MAX_PARTITION_DESCRIPTION FROM information_schema.PARTITIONS WHERE TABLE_SCHEMA = databaseName AND TABLE_NAME = tableName ORDER BY partition_description DESC LIMIT 1;
28
29 IF MAX_PARTITION_DESCRIPTION <=> "" THEN
30 SELECT "Partition table is error" AS "*****ERROR*****";
31 LEAVE L_END;
32 END IF;
33
34 # 创建新的分区
35 # 1.设置新的分区的右边界值
36 SET P_DESCRIPTION = TO_DAYS(DATE_FORMAT(DATE_ADD(NOW(),INTERVAL 2 MONTH),‘%Y%m01‘));
37 # 2.拼接新增分区的SQL语句
38 SET @S=CONCAT(‘ALTER TABLE ‘,tableName,‘ ADD PARTITION (PARTITION ‘,next_p_name,‘ VALUES LESS THAN (‘,P_DESCRIPTION,‘))‘);
39 SELECT @S;
40 # 3.使用预处理执行SQL
41 # ------------------------------------------------------------------------------------------
42 # 语法:语法
43 #     PREPARE statement_name FROM sql_text /*定义*/
44 #     EXECUTE statement_name [USING variable [,variable...]] /*执行预处理语句*/
45 #     DEALLOCATE PREPARE statement_name /*删除定义*/
46 # ------------------------------------------------------------------------------------------
47 PREPARE stmt2 FROM @S;
48 EXECUTE stmt2;
49 DEALLOCATE PREPARE stmt2;
50
51 END L_END

-----------------------------------------------------------------------

二.定时事件创建

时间: 2024-12-11 18:49:18

MYSQL定时创建表分区的相关文章

mysql创建表分区

MySQL创建表分区 create table erp_bill_index( id int primary key auto_increment, addtime datetime ); insert into erp_bill_index(addtime) values ('2018-02-01 12:00:00'), ('2018-03-01 12:00:00'), ('2018-04-01 12:00:00'), ('2018-05-01 12:00:00'), ('2018-06-01

oracle11g interval(numtoyminterval())自动创建表分区

Oracle11g通过间隔分区实现按月创建表分区 在项目数据库设计过程中由于单表的数据量非常庞大,需要对表进行分区处理.由于表中的数据是历史交易,故按月分区,提升查询和管理. 由于之前对于表分区了解不多,为了实现上述功能查了很多资料,一开始的方向是通过Crontab调用Shell脚本来按月自动创建分区,或者使用Oracle的Job调用存储过程来自动创建分区.在研究上述两套方案的过程中,无意发现Oracle11g有间隔分区功能,对于使用Range分区的可以按年,月,日来自动生成分区.语法如下: ?

Oracle 11g 通过间隔分区实现按月创建表分区

在项目数据库设计过程中由于单表的数据量非常庞大,需要对表进行分区处理.由于表中的数据是历史交易,故按月分区,提升查询和管理. 由于之前对于表分区了解不多,为了实现上述功能查了很多资料,一开始的方向是通过Crontab调用Shell脚本来按月自动创建分区,或者使用Oracle的Job调用存储过程来自动创建分区.在研究上述两套方案的过程中,无意发现Oracle11g有间隔分区功能,对于使用Range分区的可以按年,月,日来自动生成分区.语法如下: CREAT TABLE TABLE1 ( TABLE

MySql数据库创建表

3.3.MySql数据库创建表 创建5个表: UserInfo用户基础表 Role 角色表 MenuInfo 菜单即控制表 Relation_Role_Menu 角色对应菜单关系表 RelaTion_User_Role  用户角色关系表 Depart 部门信息表 表名:USERINFO 用户信息表 序号 列名 数据类型 长度 小数位 标识 主键 允许空 默认值 说明 1 ID INT 是 否 主键 2 USER_NAME VARCHAR 100 是 用户姓名 3 USER_ID VARCHAR

MySQL数据库分表分区(一)(转)

面对当今大数据存储,设想当mysql中一个表的总记录超过1000W,会出现性能的大幅度下降吗? 答案是肯定的,一个表的总记录超过1000W,在操作系统层面检索也是效率非常低的 解决方案: 目前针对海量数据的优化有两种方法: 1.大表拆小表的方式(主要有分表和分区两者技术) (1)分表技术 垂直分割 优势:降低高并发情况下,对于表的锁定. 不足:对于单表来说,随着数据库的记录增多,读写压力将进一步增大. 水平分割 如果单表的IO压力大,可以考虑用水平分割,其原理就是通过hash算法,将一张表分为N

MySQL 数据库分表分区

博主QQ:819594300 博客地址:http://zpf666.blog.51cto.com/ 有什么疑问的朋友可以联系博主,博主会帮你们解答,谢谢支持!一.分表 为什么要分表? 我们的数据库数据越来越大,随之而来的是单个表中数据太多.以至于查询书读变慢,而且由于表的锁机制导致应用操作也搜到严重影响,出现了数据库性能瓶颈. 什么是分表? 分表是将一个达标按照一定的规则分解成多张具有独立存储空间的实体表,每个表都对应三个文件,.MYD数据文件..MYI索引文件..frm表结构文件.这些表可以分

mysql数据库分表分区

防伪码:博观而约取,厚积而薄发 为什么要分表和分区? 我们的数据库数据越来越大,随之而来的是单个表中数据太多.以至于查询书读变慢,而且 由于表的锁机制导致应用操作也搜到严重影响,出现了数据库性能瓶颈. mysql 中有一种机制是表锁定和行锁定,是为了保证数据的完整性.表锁定表示你们都不能 对这张表进行操作,必须等我对表操作完才行.行锁定也一样,别的 sql 必须等我对这条数 据操作完了,才能对这条数据进行操作.当出现这种情况时,我们可以考虑分表或分区. 1.分表 什么是分表? 分表是将一个大表按

Qt编译mysql以及创建表后进行导入操作

鉴于许多同学对Qt编译myql总是不能成功,出现各种问题,今天特此写出本教程,希望能够帮到需要的同学. 首先,需要明白编译的目的和原理. 目的:Qt 5.2版本以前都是不带mysql驱动的,所以需要进行编译mysql数据库驱动,只有编译完成后才能被Qt加载上.如果你安装的是Qt5.2以后版本的,那就不需要了,因为在后来的版本中,Qt官方增加这一模块. 可以在Qt的安装插件目录下查看自己的驱动是否已经存在.例如我的在目录: C:\Qt\4.8.2\plugins\sqldrivers.可以看到当前

SQL Server 创建表分区

先准备测试表 CREATE TABLE [dbo].[Employee] ( EmployeeNo INT IDENTITY(1,1) PRIMARY KEY, EmployeeName NVARCHAR(50) NULL ); 插入一些数据 INSERT Employee DEFAULT VALUES; GO 10000 UPDATE Employee set EmployeeName = 'Employee ' + CONVERT(VARCHAR, EmployeeNo) 创建文件组 创建文