因单表数据太大, 需要表按时间分区 分区字段 pay_out_date 按天分 要求自动创建

1. 创建分区表

MYSQL的分区字段,必须包含在主键字段内

常见错误提示

错误提示:#1503
A PRIMARY KEY MUST INCLUDE ALL COLUMNS IN THE TABLE'S PARTITIONING FUNCTION
MySQL主键的限制,每一个分区表中的公式中的列,必须在主键/unique key 中包括

CREATE TABLE `game_bet` (
   `id` BIGINT(20) NOT NULL AUTO_INCREMENT,
   `create_date` DATETIME(6) DEFAULT NULL,
   `create_person` VARCHAR(50) DEFAULT NULL,
   `update_date` DATETIME(6) DEFAULT NULL,
   `update_person` VARCHAR(50) DEFAULT NULL,
   `bet_code` VARCHAR(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
   `agent_code` VARCHAR(50) NOT NULL,
   `game_id` INT(11) NOT NULL,
   `game_name` VARCHAR(50) DEFAULT NULL,
   `room_code` VARCHAR(11) NOT NULL,
   `desk_code` VARCHAR(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
   `user_id` BIGINT(20) NOT NULL,
   `user_name` VARCHAR(50) NOT NULL,
   `round_code` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
   `commission` DECIMAL(18,3) NOT NULL,
   `bet_amount` DECIMAL(18,3) NOT NULL,
   `valid_bet_amount` DECIMAL(18,3) NOT NULL,
   `pay_out` DECIMAL(18,3) NOT NULL,
   `win_amount` DECIMAL(18,3) NOT NULL,
   `settle_flag` INT(11) NOT NULL,
   `device` INT(11) NOT NULL,
   `login_ip` VARCHAR(50) NOT NULL,
   `currency` VARCHAR(50) NOT NULL,
   `bet_date` DATETIME(6) DEFAULT NULL,
   `pay_out_date` DATETIME(6) NOT NULL DEFAULT '1970-01-01 00:00:00.000000',
   `result` VARCHAR(50) NOT NULL,
   PRIMARY KEY (`id`,`pay_out_date`),
   KEY `IX_game_bet_agent_code` (`agent_code`),
   KEY `IX_game_bet_create_date` (`create_date`),
   KEY `IX_game_bet_device` (`device`),
   KEY `IX_game_bet_game_id` (`game_id`),
   KEY `IX_game_bet_pay_out_date` (`pay_out_date`),
   KEY `IX_game_bet_round` (`round_code`)
) ENGINE=INNODB DEFAULT CHARSET=utf8
 PARTITION BY RANGE (to_days(`pay_out_date`))
(PARTITION p20190421 VALUES LESS THAN (737535) ENGINE = InnoDB)

2. 创建每日新增表分区的存储过程

DELIMITER $$

USE `poker_games`$$

DROP PROCEDURE IF EXISTS `time_partition_procedure`$$

CREATE DEFINER=`root`@`%` PROCEDURE `time_partition_procedure`()
BEGIN

SELECT REPLACE(b.partition_name,'p','') INTO @in_date FROM information_schema.PARTITIONS b WHERE b.table_name ='game_bet' ORDER BY b.partition_ordinal_position DESC LIMIT 1;

SET @max_date= DATE_ADD(@in_date,INTERVAL 1 DAY)+0 ;

SET @date= DATE_ADD(@in_date,INTERVAL 1 DAY)+0 ;

SET @sql=CONCAT('ALTER TABLE game_bet add PARTITION (PARTITION p',@date,' VALUES LESS THAN (TO_DAYS(''',@max_date,''')));');

SELECT @sql;
SELECT @max_date;

PREPARE strsql FROM @sql;    #预执行sql

EXECUTE strsql;           #执行sql

DEALLOCATE PREPARE strsql;   #释放sql

COMMIT;

END$$

DELIMITER ;

3. 创建每天执行存储的事件 明天凌晨3点执行

DELIMITER $$

CREATE EVENT `poker_games`.`time_partition_event`
ON SCHEDULE EVERY 1 DAY STARTS DATE_ADD(CURRENT_DATE+1,INTERVAL 3 HOUR)
ON COMPLETION PRESERVE
ENABLE DO
BEGIN
    CALL time_partition_procedure();
END;

mysql8.0 定时创建分区表记录 每天定时创建下一天的分区表的更多相关文章

  1. MySQL8.0数据库出现的问题——外码创建方式、外键约束两个引用列不兼容问题、check约束问题、用触发器代替check约束、关键字DELIMITER、删除添加索引、删除添加外键约束、和一些数据库方面的操作

    一.首先先说一下我们都需要建立那些表 mysql> CREATE TABLE IF NOT EXISTS `student`( -> `sno` CHAR(8) NOT NULL, -&g ...

  2. Linux安装Mysql8.0.20并配置主从复制(一主一从,双主双从)

    1. 主从复制解释   将主数据库的增删改查等操作记录到二进制日志文件中,从库接收主库日志文件,根据最后一次更新的起始位置,同步复制到从数据库中,使得主从数据库保持一致. 2. 主从复制的作用 高可用 ...

  3. Windows10安装MySQL8.0

    1.到MySQL官网下载安装包:https://dev.mysql.com/downloads/mysql/:选择8.0版本: 2.将下载好的安装包(mysql-8.0.12-winx64 .zip) ...

  4. MySQL8.0在Windows下的安装和使用

    前言 MySQL在Windows下有2种安装方式:1.图形化界面方式安装MySQL 2.noinstall方式安装MySQL.在这里,本文只介绍第二种方式:以noinstall方式安装MySQL,以及 ...

  5. windows10更换mysql8.0.17

    下载windows版本mysql 解压后创建my.ini文件初始化mysql和data文件夹用来存数据 my.ini内容 [mysqld] # 设置3306端口 port=3306 # 设置mysql ...

  6. 实践:Linux下安装mysql8.0

    镜像下载.域名解析.时间同步请点击 阿里云开源镜像站 一.下载mysql8.0安装包 1.在local创建mysql文件夹 cd /usr/local mkdir mysql cd mysql 2.使 ...

  7. mysql命令行创建存储过程命令行定时执行sql语句

    mysql -uroot -p show databases; use scm; show tables; show procedure status; 其他命令: SHOW VARIABLES LI ...

  8. mysql8.0.16操作记录

    mysql8.0.16操作记录 2.1.登录 -uroot -p'AnvcTMagdLarwNV3CKaC' mysql: [Warning] Using a password on the comm ...

  9. 【SQL必知必会笔记(1)】数据库基础、SQL、MySQL8.0.16下数据库、表的创建及数据插入

    文章目录 1.数据库基础 1.1 数据库(database) 1.2 表(table) 1.3 列和数据类型 1.4 行 1.5 主键 2.什么是SQL 3.创建后续练习所需数据库.表(MySQL8. ...

随机推荐

  1. [unix]commvault在unix系统上本地安装报“NFS directory cannot be used”

    远程安装持续的pending: 本地安装报“NFS directory cannot be used” 修改安装包 安装目录 的权限, 从777改回775. 就可以解决这个报错.

  2. MATLAB模型预测控制(MPC,Model Predictive Control)

    模型预测控制是一种基于模型的闭环优化控制策略. 预测控制算法的三要素:内部(预测)模型.参考轨迹.控制算法.现在一般则更清楚地表述为内部(预测)模型.滚动优化.反馈控制. 大量的预测控制权威性文献都无 ...

  3. 【CF1157F】Maximum Balanced Circle

    题目大意:给定一个长度为 N 的序列,求是否能够从序列中选出一个集合,使得这个集合按照特定的顺序排成一个环后,环上相邻的点之间的权值差的绝对值不超过 1. 题解:集合问题与序列顺序无关,因此可以先将序 ...

  4. dedecms安装操作-重安装-开启GD库

    wamp5_1.7.4 打开:http://localhost/install/安装 (输入:域名/install,回车跳转到安装界面,勾选“我已经阅读并同意此协议”,然后点击“继续按钮”.) 重安装 ...

  5. echarts 折线图自定义颜色与修改legend颜色

    option4 = { title : { text: '', subtext: '' }, color:['#2db7f5','#ff6600','#808bc6'],      //关键加上这句话 ...

  6. 微信小程序授权登录

    目录 自定义授权页面 点击授权登录后出现微信自带的授权登录弹窗 <!--index.wxml--> <!-- 授权界面 --> <cover-view class='au ...

  7. 【JS】前端文件下载(无刷新)方法总结

    #传统方法 利用iframe 或 form.submit 或 windows.open直接向后端发请求,后端返回文件流,后端处理成功后会直接返回到页面,浏览器会整理并打开自己的保存下载文件机制 . 1 ...

  8. STL迭代器iterator

    一:迭代器原理 迭代器是一个“可遍历STL容器内全部或部分元素”的对象. 迭代器指出容器中的一个特定位置. 迭代器就如同一个指针. 迭代器提供对一个容器中的对象的访问方法,并且可以定义了容器中对象的范 ...

  9. Oracle DB Day01(SQL)

    --时间为什么不是现在呢? --设置时区和显示时间 ALTER DATABASE SET TIME_ZONE='+08:00' select to_char(current_timestamp at ...

  10. 【LOJ 6041】「雅礼集训 2017 Day7」事情的相似度

    Description 人的一生不仅要靠自我奋斗,还要考虑到历史的行程. 历史的行程可以抽象成一个 01 串,作为一个年纪比较大的人,你希望从历史的行程中获得一些姿势. 你发现在历史的不同时刻,不断的 ...