Mysql 5.6 中是否可以使用触发器自动为现有表创建新分区的过程?
我有两个表表A和表B。我需要根据列ID对表B进行列表分区。如果在表 A 中插入新列,我需要自动执行使用新 ID 在表 B 中创建分区的过程。
**Table A Table B
ID ID
1 1
2 2
3**
现在我需要自动化为表 B 中的 Id 值 3 创建分区的过程,以便在表 B 中插入记录时不会抛出错误。
可以创建一个存储过程来在运行时创建分区,但可以通过调用该存储过程并在其中运行dynamicSQL来创建具有自定义名称的新分区。
您可以通过以下示例来理解这一点,其中我们根据日期动态创建销售表分区(这是按日获取数据的非常常见的任务)
Let the table definition :
创建销售表( customer_id int NOT NULL, 客户名称 varchar(40), store_id varchar(20) NOT NULL, bill_number int NOT NULL, bill_date日期主键不为空, 金额小数(8, 2) NOT NULL )
PARTITION BY RANGE (YEAR(bill_date)) ( // some static partition
PARTITION p0 VALUES LESS THAN (2016),
PARTITION p1 VALUES LESS THAN (2017),
PARTITION p2 VALUES LESS THAN (2018),
PARTITION p3 VALUES LESS THAN (2020)
);
Stored Procedure to create partition:
分隔符 // 创建过程 AddPartitionToTable( IN newPartitionValue DATE)
BEGIN
-- Create the dynamic SQL statement, using a prepared statement for security
SET @dynamicSQL := CONCAT('ALTER TABLE Sales', ' ADD PARTITION (PARTITION p', DATE_FORMAT(newPartitionValue, '%Y%m%d'), ' VALUES LESS THAN (Year(''', newPartitionValue, ''')))');
PREPARE stmt FROM @dynamicSQL;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END //
分隔符;