欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL通過存儲過程來添加和刪除分區(qū)的過程(List分區(qū))

 更新時間:2023年09月14日 09:01:30   作者:業(yè)余磚家  
這篇文章主要介紹了MySQL-通過存儲過程來添加和刪除分區(qū)(List分區(qū)),本文通過創(chuàng)建存儲過程來添加和刪除分區(qū),可以避免在分區(qū)存在時添加分區(qū)報錯,或者分區(qū)不存在時刪除分區(qū)報錯的問題,需要的朋友可以參考下

1.背景原因

當前MySQL不支持在添加和刪除分區(qū)時,使用IF NOT EXISTS和IF EXISTS。所以在執(zhí)行調(diào)度任務(wù)時,直接通過ADD PARTITION和DROP PARTITION不可避免會報錯。本文通過創(chuàng)建存儲過程來添加和刪除分區(qū),可以避免在分區(qū)存在時添加分區(qū)報錯,或者分區(qū)不存在時刪除分區(qū)報錯的問題。

本文介紹的是關(guān)于LIST分區(qū)的添加和刪除。

2.前提準備

創(chuàng)建List分區(qū)表

DROP TABLE  IF  EXISTS `list_part_table` ;
CREATE TABLE  IF  NOT  EXISTS `list_part_table`  (
`id` bigint(32) NOT NULL COMMENT '主鍵',
`request_time` datetime(0) NOT NULL COMMENT '請求時間',
`response_time` datetime(0) NOT NULL COMMENT '響應(yīng)時間',
`time_used` int(11) NOT NULL COMMENT '耗時(ms)',
`create_by` varchar(48)  DEFAULT NULL COMMENT '創(chuàng)建人',
`update_by` varchar(48)  DEFAULT NULL COMMENT '修改人',
`create_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '創(chuàng)建時間',
`update_time` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(0) ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '更新時間',
PRIMARY KEY (`id`, `request_time`) USING BTREE
) PARTITION BY list(TO_DAYS(request_time)) (
PARTITION p0 VALUES IN  (0)
) ;

 查看表中的分區(qū)信息

select  *  from  information_schema.partitions  where table_name like 'list_part_table%' ;

3.添加和刪除分區(qū)語句

(1)添加分區(qū)

alter  table  list_part_table  add partition(partition  p202001 values in (202001));
alter  table  list_part_table  add partition(partition  p20201201 values in (20201201));

查看表的分區(qū)信息

select  * from  information_schema.partitions  where table_name like 'list_part_table%' ;

(2)刪除分區(qū)

alter  table  list_part_table  drop partition  p202001,p20201201 ;

查看表的分區(qū)信息

select  * from  information_schema.partitions  where table_name like 'list_part_table%' ;

說明:當上面的添加分區(qū)和刪除分區(qū)語句執(zhí)行多次時,就會報錯。 

4.通過存儲過程添加LIST分區(qū)

(1)添加分區(qū)的存儲過程

DROP  PROCEDURE  IF EXISTS create_list_partition ;
DELIMITER $$
CREATE PROCEDURE  IF  NOT  EXISTS create_list_partition (par_value bigint, tb_schema varchar(128),tb_name varchar(128))
BEGIN
DECLARE par_name varchar(32);
DECLARE par_value_str varchar(32);
DECLARE par_exist int(1);
DECLARE _err int(1);
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION, SQLWARNING, NOT FOUND SET _err = 1;
START TRANSACTION;
SET par_value_str = CONCAT('', par_value);
SET par_name = CONCAT('p', par_value);
SELECT  COUNT(1) INTO par_exist  FROM information_schema.PARTITIONS WHERE TABLE_SCHEMA = tb_schema AND TABLE_NAME = tb_name AND PARTITION_NAME = par_name;
IF (par_exist = 0) THEN
SET @alter_sql = CONCAT('alter table ', tb_name, ' add PARTITION (PARTITION ', par_name, ' VALUES IN (', par_value_str, '))');
PREPARE stmt1 FROM @alter_sql;
EXECUTE stmt1;
END IF;
COMMIT;
END
$$

(2)調(diào)用存儲過程添加分區(qū)

添加分區(qū)

CALL create_list_partition(202201, 'test', 'list_part_table');
CALL create_list_partition(202202, 'test', 'list_part_table');
CALL create_list_partition(20230912, 'test', 'list_part_table');
CALL create_list_partition(20230913, 'test', 'list_part_table');

查看表的分區(qū)信息

select  * from  information_schema.partitions  where table_name like 'list_part_table%' ;

5.通過存儲過程刪除LIST分區(qū)

(1)刪除分區(qū)的存儲過程

DROP PROCEDURE  IF  EXISTS drop_list_partition ;
DELIMITER $$
CREATE PROCEDURE  IF  NOT  EXISTS drop_list_partition (part_value bigint, tb_schema varchar(128), tb_name varchar(128))
BEGIN
DECLARE str_day varchar(64);
DECLARE _err int(1);
DECLARE done int DEFAULT 0;
DECLARE par_name varchar(64);
DECLARE cur_partition_name CURSOR FOR  SELECT  partition_name FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_SCHEMA = tb_schema AND table_name = tb_name  ORDER BY partition_ordinal_position;
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION, SQLWARNING, NOT FOUND SET _err = 1;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
SET str_day = CONCAT('',part_value);
OPEN cur_partition_name;
REPEAT
FETCH cur_partition_name INTO par_name;
IF (str_day = SUBSTRING(par_name, 2)) THEN
SET @alter_sql = CONCAT('alter table ', tb_name, ' drop PARTITION ', par_name);
PREPARE stmt1 FROM @alter_sql;
EXECUTE stmt1;
END IF;
UNTIL done END REPEAT;
CLOSE cur_partition_name;
END
$$

(2)調(diào)用存儲過程刪除分區(qū)

刪除分區(qū)

CALL drop_list_partition(202201, 'test', 'list_part_table');
CALL drop_list_partition(202202, 'test', 'list_part_table');

查看表的分區(qū)信息

select  * from  information_schema.partitions  where table_name like 'list_part_table%' ;

到此這篇關(guān)于MySQL-通過存儲過程來添加和刪除分區(qū)(List分區(qū))的文章就介紹到這了,更多相關(guān)MySQL添加和刪除分區(qū)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MySQL修改密碼的四種方式詳解

    MySQL修改密碼的四種方式詳解

    文章介紹了4種修改MySQL密碼的方法,包括使用setpassword命令、mysqladmin命令、修改user表以及忘記密碼時的處理步驟,感興趣的朋友一起看看吧
    2025-03-03
  • 64位CentOs7源碼安裝mysql-5.6.35過程分享

    64位CentOs7源碼安裝mysql-5.6.35過程分享

    本文給大家分享的是在64位CentOs7系統(tǒng)中使用源碼安裝mysql-5.6.35的詳細過程,非常的細致,有需要的小伙伴可以參考下
    2017-02-02
  • mysql實現(xiàn)外連接方式

    mysql實現(xiàn)外連接方式

    今天小編就為大家分享一篇mysql實現(xiàn)外連接方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • MySQL連接被阻塞的問題分析與解決方案(從錯誤到修復(fù))

    MySQL連接被阻塞的問題分析與解決方案(從錯誤到修復(fù))

    在Java應(yīng)用開發(fā)中,數(shù)據(jù)庫連接是必不可少的一環(huán),然而,在使用MySQL時,我們可能會遇到MySQL服務(wù)器由于檢測到過多的連接失敗,自動阻止了來自該主機的連接請求,本文將深入分析該問題的原因,并提供完整的解決方案,需要的朋友可以參考下
    2025-04-04
  • MySQL插入不了中文數(shù)據(jù)問題的原因及解決

    MySQL插入不了中文數(shù)據(jù)問題的原因及解決

    最近發(fā)現(xiàn)新安裝的MySQL數(shù)據(jù)庫不能插入中文字段,所以下面這篇文章主要給大家介紹了關(guān)于MySQL插入不了中文數(shù)據(jù)問題的原因及解決方法,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-05-05
  • MySQL中datetime時間字段的四舍五入操作

    MySQL中datetime時間字段的四舍五入操作

    這是由一則生產(chǎn)環(huán)境問題引出的MySQL對于datetime時間類型字段中毫秒的處理的深究,這篇文章主要給大家介紹了關(guān)于MySQL中datetime時間字段的四舍五入操作的相關(guān)資料,需要的朋友可以參考下
    2021-09-09
  • Mysql修改存儲過程相關(guān)權(quán)限問題

    Mysql修改存儲過程相關(guān)權(quán)限問題

    這篇文章主要介紹了Mysql修改存儲過程相關(guān)權(quán)限問題,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • mysql父子集查詢(根據(jù)父級查詢所有子集)

    mysql父子集查詢(根據(jù)父級查詢所有子集)

    某些場景可能需要維護一些有父子關(guān)系的數(shù)據(jù),本文主要介紹了mysql父子集查詢(根據(jù)父級查詢所有子集),具有一定的參考價值,感興趣的可以了解一下
    2024-02-02
  • MySQL分類排名和分組TOP N實例詳解

    MySQL分類排名和分組TOP N實例詳解

    大家好,本篇文章主要講的是MySQL分類排名和分組TOP N實例詳解,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • IDEA連接不上MySQL端口號占用的解決

    IDEA連接不上MySQL端口號占用的解決

    這篇文章主要介紹了IDEA連接不上MySQL端口號占用的解決,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11

最新評論