mysql分區(qū)表學(xué)習(xí)之日期分區(qū)
1.創(chuàng)建分區(qū)表
CREATE TABLE `api_log` ( `requestId` varchar(64) NOT NULL COMMENT '調(diào)用的唯一標(biāo)示', `systemCode` varchar(64) NOT NULL COMMENT '業(yè)務(wù)系統(tǒng)編碼', `tongID` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `tong_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `pt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '分區(qū)字段', PRIMARY KEY (`tongID`,`requestId`,`pt`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='日志信息表' /*!50100 PARTITION BY RANGE (TO_DAYS(pt)) (PARTITION p20230510 VALUES LESS THAN (739015) ENGINE = InnoDB, PARTITION p20230511 VALUES LESS THAN (739016) ENGINE = InnoDB) */;
2.查看分區(qū)
-- 01 查詢單分區(qū)
SELECT * from api_log partition (p20230510)
-- 02 查看所有分區(qū)
SELECT
PARTITION_NAME,
TABLE_ROWS
FROM
INFORMATION_SCHEMA.PARTITIONS
WHERE
TABLE_NAME = 'api_log';3.添加分區(qū)
-- 添加分區(qū)
ALTER TABLE hz_api_log_delta add PARTITION (PARTITION p20230512 VALUES LESS THAN (TO_DAYS('2023-05-12')));4.存儲(chǔ)過程:分區(qū)刪除與創(chuàng)建
delimiter //
CREATE PROCEDURE `pro_create_del_pt`()
BEGIN
#Routine body goes here...
## 01.新建后面兩天的分區(qū)
## 02獲取當(dāng)前時(shí)間
SELECT CONCAT('p',DATE_FORMAT(DATE_ADD(NOW(),INTERVAL 2 DAY),'%Y%m%d')) into @pname;
SELECT DATE_ADD(NOW(),INTERVAL 2 DAY) into @pdate;
#刪除的分區(qū)時(shí)間
SELECT DATE_FORMAT(DATE_ADD(NOW(),INTERVAL -17 DAY) ,'%Y%m%d') into @ddate;
## 03新增分區(qū)
-- ALTER TABLE api_log add PARTITION (PARTITION p20230509 VALUES LESS THAN (TO_DAYS(DATE_ADD(NOW(),INTERVAL 1 DAY))));
set @sql_add_p=concat("ALTER TABLE api_log add PARTITION (PARTITION ",@pname," VALUES LESS THAN (TO_DAYS('",@pdate,"')))");
prepare sql_add_p from @sql_add_p;
EXECUTE sql_add_p ;
DEALLOCATE PREPARE sql_add_p;
## 04 刪除分區(qū)
#alter table api_log drop partition p20230507;
set @sql_del_p=concat("ALTER TABLE api_log drop PARTITION p",@ddate);
prepare sql_del_p from @sql_del_p;
EXECUTE sql_del_p ;
DEALLOCATE PREPARE sql_del_p;
END
//
delimiter ;5.事件定時(shí)
-- 創(chuàng)建事件 delimiter $$ create event event_pro_create_del_pt on schedule every 1 DAY STARTS '2023-05-10 20:00:00 ' comment '每日20:00執(zhí)行' DO call pro_create_del_pt(); $$ delimiter ;
-- 查看事件 show events; 或者 select * from mysql.event;
6.觸發(fā)器設(shè)計(jì):子表每插入一行,總表獲得一行
-- 創(chuàng)建事件 delimiter $$ CREATE TRIGGER `trigger_api_log` AFTER INSERT ON `api_log` FOR EACH ROW BEGIN insert into hz_api.api_log_all (requestId,systemCode,sjly_part) VALUES (NEW.requestId,NEW.systemCode,'區(qū)縣'); end; $$ delimiter ;
7.創(chuàng)建索引
-- 創(chuàng)建普通索引:在tong_time字段 ALTER TABLE db_base.api_log ADD INDEX index_name ( tong_time ); -- 查看索引 show index from db_base.api_log;
8.添加枚舉型字段
ALTER TABLE db_base.api_log add SJLY_PART enum('線上','線下') default null COMMENT '數(shù)據(jù)來源';總結(jié)
到此這篇關(guān)于mysql分區(qū)表學(xué)習(xí)之日期分區(qū)的文章就介紹到這了,更多相關(guān)mysql日期分區(qū)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
一步步教你利用Mysql存儲(chǔ)過程造百萬級(jí)數(shù)據(jù)
因工作需要維護(hù)一張中建表數(shù)據(jù)內(nèi)置,所以得造數(shù)據(jù)所以使用存儲(chǔ)過程來造數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于如何一步步利用Mysql存儲(chǔ)過程造百萬級(jí)數(shù)據(jù)的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-03-03
MySQL數(shù)據(jù)庫char與varchar的區(qū)別分析及使用建議
本文主要介紹了mysql中VARCHAR與CHAR字符型數(shù)據(jù)的差異以及這兩種字符型數(shù)據(jù)在項(xiàng)目中的使用建議,真心不錯(cuò)。值得一看。小編有種受益匪淺的感覺。2014-09-09
MySQL學(xué)習(xí)必備條件查詢數(shù)據(jù)
這篇文章主要介紹了MySQL學(xué)習(xí)必備條件查詢數(shù)據(jù),首先通過利用where語句可以對數(shù)據(jù)進(jìn)行篩選展開主題相關(guān)內(nèi)容,具有一定的參考價(jià)值,需要的小伙伴可以參考一下,希望對你有所幫助2022-03-03
Ubuntu 18.04下mysql 8.0 安裝配置方法圖文教程
這篇文章主要為大家詳細(xì)介紹了Ubuntu 18.04下mysql 8.0 安裝配置方法圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-05-05
淺析SQL語句行列轉(zhuǎn)換的兩種方法 case...when與pivot函數(shù)的應(yīng)用
SQL語句行列轉(zhuǎn)換的兩種方法 case...when和pivot函數(shù)應(yīng)用,運(yùn)用pivot 函數(shù)只支持?jǐn)?shù)據(jù)庫版本2005以上的。一般運(yùn)用case when else end 的方法比較多,比較普遍2013-08-08
Mysql數(shù)據(jù)庫開啟遠(yuǎn)程連接流程
文章講述了如何在本地MySQL數(shù)據(jù)庫上開啟遠(yuǎn)程訪問,并詳細(xì)步驟包括配置防火墻、設(shè)置MySQL用戶權(quán)限、使用Navicat進(jìn)行遠(yuǎn)程連接等2025-02-02

