mysql 分區表

//分區函數
CREATE DEFINER=`root`@`%` FUNCTION `query_str`() RETURNS varchar(2000) CHARSET utf8
BEGIN
DECLARE start_date date DEFAULT '2018-05-17';
DECLARE res_str varchar(2000) DEFAULT '';
WHILE start_date<'2018-06-16' DO
set res_str = concat(res_str,'PARTITION p',DATE_FORMAT(DATE_SUB(start_date,interval 1 day),'%Y%m%d'),' VALUES LESS THAN (TO_DAYS(''',start_date,'''))',',');
set start_date = DATE_ADD(start_date,INTERVAL 1 DAY);
END WHILE;
RETURN res_str;
ENDsql

 

 


//自動分區事件
DELIMITER $$less

CREATE EVENT `memberorder_partition` ON SCHEDULE EVERY 1 DAY STARTS '2016-11-04 23:30:01' ON COMPLETION NOT PRESERVE DISABLE ON SLAVE COMMENT '分區表memberorder維護定時調度 1.天天23:30建立下一天分區' DO BEGIN
/*START auto_ADD_partition*/
SET @auto_add_sql = CONCAT(
"alter table `memberorder` add partition (partition p",
DATE_FORMAT(DATE_ADD(CURRENT_DATE(),INTERVAL 1 DAY), '%Y%m%d'),
" values less than (to_days('",
DATE_ADD(CURRENT_DATE(),INTERVAL 2 DAY),
"')))"
) ;
PREPARE stmt_add FROM @auto_add_sql ;
EXECUTE stmt_add ;
/*END auto_ADD_partition*/函數

END$$事件

DELIMITER ;ci

 


//建立新分區表
CREATE TABLE `memberorder_tmp` (
`Id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`MemberId` int(11) NOT NULL DEFAULT '0' COMMENT '商戶編號',
`OrderId` varchar(64) CHARACTER SET utf32 NOT NULL DEFAULT '' COMMENT '系統訂單編號_平臺',
`OrderStatus` int(11) NOT NULL DEFAULT '0' COMMENT '訂單狀態',
`OrderStatusTitile` varchar(50) NOT NULL DEFAULT '' COMMENT '訂單狀態描述',
`OrderTime` datetime NOT NULL DEFAULT '2000-01-01 00:00:00' COMMENT '訂單時間',
`OrderAmount` decimal(11,2) NOT NULL DEFAULT '0.00' COMMENT '訂單金額',
`OrderAmountFee` decimal(11,2) NOT NULL DEFAULT '0.00' COMMENT '平臺利潤-實際利潤包含分潤',
`OrderMoneyFee` decimal(11,2) NOT NULL DEFAULT '0.00' COMMENT '平臺利潤-不包含分潤 下游手續費-上游成本',
`OrderAmountRate` decimal(11,2) NOT NULL DEFAULT '0.00' COMMENT '平臺利潤千分比',
`OrderNotifyUrl` varchar(255) NOT NULL DEFAULT '' COMMENT '平臺收取上游回調地址',
`MerchantChannelRate` decimal(11,2) NOT NULL DEFAULT '0.00' COMMENT '商戶費率',
`MerchantSharpProfit` decimal(11,2) NOT NULL DEFAULT '0.00' COMMENT '商戶分潤',
`TopAmountFee` decimal(11,2) NOT NULL DEFAULT '0.00' COMMENT '上游收取平臺費率金額-手續費',
`TopSharpProfitFee` decimal(11,2) NOT NULL DEFAULT '0.00' COMMENT '上游分潤金額',
`ChannelPayTypeRate` decimal(11,2) NOT NULL DEFAULT '0.00' COMMENT '上游費率',
`ChannelSharpProfit` decimal(11,2) NOT NULL DEFAULT '0.00' COMMENT '通道上游分潤',
`LowAmountFee` decimal(11,2) NOT NULL DEFAULT '0.00' COMMENT '平臺收取商戶費率金額-手續費',
`LowSharpProfitFee` decimal(11,2) NOT NULL DEFAULT '0.00' COMMENT '下游分潤金額',
`OrderIsComplete` tinyint(1) NOT NULL DEFAULT '0' COMMENT '訂單是否完成',
`PayTypeId` int(11) NOT NULL DEFAULT '0' COMMENT '支付方式編號',
`ChannelId` int(11) NOT NULL COMMENT '通道編號',
`ChannelPayId` int(11) NOT NULL DEFAULT '0' COMMENT 'channelpaytype支付通道編號',
`TopOrderId` varchar(64) NOT NULL DEFAULT '' COMMENT '通道訂單編號_上游',
`MerchantOrderId` varchar(64) NOT NULL DEFAULT '' COMMENT '商戶訂單編號_下游',
`MerchantOrderTime` datetime NOT NULL DEFAULT '2000-01-01 00:00:00' COMMENT '商戶提交訂單時間',
`MerchantNotifyUrl` varchar(500) NOT NULL DEFAULT '' COMMENT '商戶回調地址',
`MerchantHttpJson` text NOT NULL COMMENT '商戶請求時數據包',
`IsTopNotify` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否收到上游回調',
`IsTopNotifyResPond` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否響應了上游回調',
`TopNotify` text NOT NULL COMMENT '上游回調內容',
`TopNotifyTime` datetime NOT NULL DEFAULT '2000-01-01 00:00:00' COMMENT '上游回調時間',
`IsLowNotify` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否發送下游回調',
`IsLowNotifyResPond` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否收到下游響應回調',
`LowNotify` text NOT NULL COMMENT '下游回調內容',
`LowNotifyTime` datetime NOT NULL DEFAULT '2000-01-01 00:00:00' COMMENT '下游回調發送時間',
`ChannelStatemenType` int(11) NOT NULL DEFAULT '1' COMMENT '通道結算類型 1-T1 2-T0 3-D1 4-D0',
`IsSettlementResPond` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否執行告終算',
`IsBillSettlement` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否完成帳單結算',
`SettlementType` int(11) NOT NULL DEFAULT '0' COMMENT '結算類型 0-未進行結算 1-T1 2-T0 3-D1 4-D0',
`SettlementAmountFee` decimal(11,2) NOT NULL DEFAULT '0.00' COMMENT '帳單結算金額',
`SettlementTime` datetime NOT NULL DEFAULT '2000-01-01 00:00:00' COMMENT '帳單結算時間',
`SettlementDayId` int(11) NOT NULL DEFAULT '0' COMMENT '結算日表編號',
`SettlementMonthId` int(11) NOT NULL COMMENT '結算月表編號',
`SettlementYearId` int(11) NOT NULL COMMENT '結算年表編號',
`SalespersonId` int(11) NOT NULL DEFAULT '0' COMMENT '業務員編號',
`SalesmanDayId` int(11) NOT NULL COMMENT '結算業務員日表',
`ConditionTablekey` int(11) NOT NULL DEFAULT '0' COMMENT '分表鍵',
`ExceptionStatus` int(11) NOT NULL DEFAULT '0' COMMENT '是否異常 0-未異常 1-支付異常 2-回調異常',
`ExceptionTitle` varchar(255) NOT NULL DEFAULT '' COMMENT '異常信息',
`Remark` varchar(255) NOT NULL DEFAULT '' COMMENT '訂單備註',
`CreateUser` int(11) NOT NULL DEFAULT '0' COMMENT '建立者',
`CreateTime` datetime NOT NULL DEFAULT '2000-01-01 00:00:00' COMMENT '建立時間',
`ModifyUser` int(11) NOT NULL DEFAULT '0' COMMENT '修改者編號',
`ModifyTime` datetime NOT NULL DEFAULT '2000-01-01 00:00:00' COMMENT '修改時間',
`IsValid` tinyint(1) NOT NULL DEFAULT '1' COMMENT '是否有效',
`IsDel` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否刪除',
PRIMARY KEY (`Id`,`CreateTime`) USING BTREE,
UNIQUE KEY `Id` (`Id`,`CreateTime`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=142473 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC
PARTITION BY RANGE (TO_DAYS(CreateTime))
(
PARTITION p20180517 VALUES LESS THAN (TO_DAYS('2018-05-18')),PARTITION p20180518 VALUES LESS THAN (TO_DAYS('2018-05-19')),PARTITION p20180519 VALUES LESS THAN (TO_DAYS('2018-05-20')),PARTITION p20180520 VALUES LESS THAN (TO_DAYS('2018-05-21')),PARTITION p20180521 VALUES LESS THAN (TO_DAYS('2018-05-22')),PARTITION p20180522 VALUES LESS THAN (TO_DAYS('2018-05-23')),PARTITION p20180523 VALUES LESS THAN (TO_DAYS('2018-05-24')),PARTITION p20180524 VALUES LESS THAN (TO_DAYS('2018-05-25')),PARTITION p20180525 VALUES LESS THAN (TO_DAYS('2018-05-26')),PARTITION p20180526 VALUES LESS THAN (TO_DAYS('2018-05-27')),PARTITION p20180527 VALUES LESS THAN (TO_DAYS('2018-05-28')),PARTITION p20180528 VALUES LESS THAN (TO_DAYS('2018-05-29')),PARTITION p20180529 VALUES LESS THAN (TO_DAYS('2018-05-30')),PARTITION p20180530 VALUES LESS THAN (TO_DAYS('2018-05-31')),PARTITION p20180531 VALUES LESS THAN (TO_DAYS('2018-06-01')),PARTITION p20180601 VALUES LESS THAN (TO_DAYS('2018-06-02')),PARTITION p20180602 VALUES LESS THAN (TO_DAYS('2018-06-03')),PARTITION p20180603 VALUES LESS THAN (TO_DAYS('2018-06-04')),PARTITION p20180604 VALUES LESS THAN (TO_DAYS('2018-06-05')),PARTITION p20180605 VALUES LESS THAN (TO_DAYS('2018-06-06')),PARTITION p20180606 VALUES LESS THAN (TO_DAYS('2018-06-07')),PARTITION p20180607 VALUES LESS THAN (TO_DAYS('2018-06-08')),PARTITION p20180608 VALUES LESS THAN (TO_DAYS('2018-06-09')),PARTITION p20180609 VALUES LESS THAN (TO_DAYS('2018-06-10')),PARTITION p20180610 VALUES LESS THAN (TO_DAYS('2018-06-11')),PARTITION p20180611 VALUES LESS THAN (TO_DAYS('2018-06-12')),PARTITION p20180612 VALUES LESS THAN (TO_DAYS('2018-06-13')),PARTITION p20180613 VALUES LESS THAN (TO_DAYS('2018-06-14')),PARTITION p20180614 VALUES LESS THAN (TO_DAYS('2018-06-15')),PARTITION p20180615 VALUES LESS THAN (TO_DAYS('2018-06-16')),PARTITION p20180616 VALUES LESS THAN (TO_DAYS('2018-06-17'))
)it

//重命表名
RENAME TABLE memberorder TO memberorderhis,memberorder_tmp TO memberorder;io

//查看錶分區狀況
SELECT PARTITION_NAME,TABLE_ROWS,table_name FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_NAME = 'memberorder';event

//將源有數據轉移到新表
INSERT INTO memberorder SELECT * FROM memberorderhis;table

1.查看事件是否開啓date

SHOW VARIABLES LIKE 'event_scheduler'

 

2.設置當前事件開啓

SET GLOBAL event_scheduler = 1;

 

//刪除分區alter table memberorder drop partition p20180616

相關文章
相關標籤/搜索