mysql按年创建分区表,增加分区表,删除分区表,实战练习

1.创建分区表:

CREATE TABLE customer_login_log( 
customer_id INT UNSIGNED NOT NULL, 
login_time DATETIME NOT NULL, 
login_ip INT UNSIGNED NOT NULL, 
login_type TINYINT NOT NULL,
PRIMARY KEY (`customer_id`,`login_time`)
)ENGINE =INNODB 
PARTITION BY RANGE(YEAR(login_time))( 
partition p2007 values less than (2008),
partition p2008 values less than (2009), 
partition p2009 values less than (2010),
partition p2010 values less than (2011),
partition p2011 values less than (2012), 
partition p2012 values less than (2013),
partition p2013 values less than (2014),
partition p2014 values less than (2015),
partition p2015 values less than (2016),    
partition p2016 values less than (2017),
partition p2017 values less than (2018),
partition p2018 values less than (2019),
partition p2019 values less than (2020),
partition p2020 values less than (2021),
partition p2021 values less than (2022)
);


2.插入数据:

INSERT INTO customer_login_log(customer_id,login_time,login_ip,login_type) 
VALUES
(1001,'2017-01-25',0,1),
(1002,'2017-07-25',0,1),
(1003,'2018-01-25',0,1),
(1004,'2018-03-25',0,1),
(1005,'2016-01-25',0,1),
(1006,'2021-01-25',0,1);

3.查询数据:

select * from customer_login_log

4.查询分区表的分布情况:

SELECT table_name,partition_name,partition_description,table_rows 
FROM information_schema.PARTITIONS 
WHERE table_name='customer_login_log';


5.插入不存在的分区日期,报错:

INSERT INTO customer_login_log(customer_id,login_time,login_ip,login_type) 
VALUES
(1007,'2022-07-25',0,1),
(1008,'2023-01-25',0,1),
(1009,'2024-03-25',0,1),
(1010,'2025-01-25',0,1); 


6.手工添加分区:

ALTER TABLE customer_login_log ADD PARTITION (PARTITION p2022 VALUES LESS THAN(2023)); 
ALTER TABLE customer_login_log ADD PARTITION (PARTITION p2023 VALUES LESS THAN(2024)); 
ALTER TABLE customer_login_log ADD PARTITION (PARTITION p2024 VALUES LESS THAN(2025)); 
ALTER TABLE customer_login_log ADD PARTITION (PARTITION p2025 VALUES LESS THAN(2026)); 

7.再次插入正常:

INSERT INTO customer_login_log(customer_id,login_time,login_ip,login_type) 
VALUES
(1007,'2022-07-25',0,1),
(1008,'2023-01-25',0,1),
(1009,'2024-03-25',0,1),
(1010,'2025-01-25',0,1); 

8.查询建表语句:

show create table customer_login_log;

CREATE TABLE `customer_login_log` (
  `customer_id` int(10) unsigned NOT NULL,
  `login_time` datetime NOT NULL,
  `login_ip` int(10) unsigned NOT NULL,
  `login_type` tinyint(4) NOT NULL,
  PRIMARY KEY (`customer_id`,`login_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
/*!50100 PARTITION BY RANGE (YEAR(login_time))
(PARTITION p2007 VALUES LESS THAN (2008) ENGINE = InnoDB,
 PARTITION p2008 VALUES LESS THAN (2009) ENGINE = InnoDB,
 PARTITION p2009 VALUES LESS THAN (2010) ENGINE = InnoDB,
 PARTITION p2010 VALUES LESS THAN (2011) ENGINE = InnoDB,
 PARTITION p2011 VALUES LESS THAN (2012) ENGINE = InnoDB,
 PARTITION p2012 VALUES LESS THAN (2013) ENGINE = InnoDB,
 PARTITION p2013 VALUES LESS THAN (2014) ENGINE = InnoDB,
 PARTITION p2014 VALUES LESS THAN (2015) ENGINE = InnoDB,
 PARTITION p2015 VALUES LESS THAN (2016) ENGINE = InnoDB,
 PARTITION p2016 VALUES LESS THAN (2017) ENGINE = InnoDB,
 PARTITION p2017 VALUES LESS THAN (2018) ENGINE = InnoDB,
 PARTITION p2018 VALUES LESS THAN (2019) ENGINE = InnoDB,
 PARTITION p2019 VALUES LESS THAN (2020) ENGINE = InnoDB,
 PARTITION p2020 VALUES LESS THAN (2021) ENGINE = InnoDB,
 PARTITION p2021 VALUES LESS THAN (2022) ENGINE = InnoDB,
 PARTITION p2022 VALUES LESS THAN (2023) ENGINE = InnoDB,
 PARTITION p2023 VALUES LESS THAN (2024) ENGINE = InnoDB,
 PARTITION p2024 VALUES LESS THAN (2025) ENGINE = InnoDB,
 PARTITION p2025 VALUES LESS THAN (2026) ENGINE = InnoDB) ;

9.注意事项:
注:在这个表中没有建立MAXVIEW分区是为了维护方便,为了避免插入数据到RANGE分区失败,要做修改并添加分区的计划任务。

10.删除分区的语句(注:会将分区中的数据一并删除):

ALTER TABLE customer_login_log DROP PARTITION P2024; 

11.删除分区实战

删除前查询

删除分区

删除之后查询

 再次查看p2025分区和数据已经被彻底删除。

猜你喜欢

转载自blog.csdn.net/qyq88888/article/details/121148423