如果你的 id 字段包含浮点数,如 1256324.3,并且你希望使用整数部分 1256324 作为分区键,你可以使用 MySQL 的内置函数来实现这一点。以下是具体的步骤:

步骤 1: 创建用户定义函数

你可以创建一个用户定义函数来提取 id 字段的整数部分,并将其转换为整数类型。

DELIMITER $$

CREATE FUNCTION extract_integer_part(id VARCHAR(255))
RETURNS INT DETERMINISTIC
BEGIN
    DECLARE integer_part INT;
    SET integer_part = FLOOR(CAST(id AS DECIMAL)); -- 提取整数部分
    RETURN integer_part;
END $$

DELIMITER ;
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
步骤 2: 创建分区表

接下来,你可以使用这个函数作为分区键来创建分区表。

CREATE TABLE sales (
    id VARCHAR(255) PRIMARY KEY,
    product VARCHAR(50) DEFAULT 'testingpartitions',
    amount INT DEFAULT 1,
    created_at DATE NOT NULL
)
PARTITION BY RANGE (extract_integer_part(id))
(
    PARTITION p0 VALUES LESS THAN (1000000),
    PARTITION p1 VALUES LESS THAN (2000000),
    PARTITION p2 VALUES LESS THAN (3000000),
    PARTITION p3 VALUES LESS THAN (4000000),
    PARTITION p4 VALUES LESS THAN (5000000),
    PARTITION p5 VALUES LESS THAN (6000000),
    PARTITION p6 VALUES LESS THAN (7000000),
    PARTITION p7 VALUES LESS THAN (8000000),
    PARTITION p8 VALUES LESS THAN (9000000),
    PARTITION p9 VALUES LESS THAN (10000000),
    PARTITION p10 VALUES LESS THAN (11000000),
    PARTITION p11 VALUES LESS THAN MAXVALUE
);
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
示例:使用存储过程插入数据

接下来,你可以使用存储过程来插入数据。这里假设 id 字段包含浮点数值,如 1256324.3

DELIMITER $$

CREATE PROCEDURE load_data()
BEGIN
    DECLARE v INT DEFAULT 0;
    DECLARE start_id DECIMAL(10, 5) DEFAULT 1256324.3; -- 示例初始id

    WHILE v < 1000000 DO
        INSERT INTO sales (id, product, amount, created_at)
        VALUES (CONCAT(start_id + v, '.3'), 'testingpartitions', 1, CURDATE());
        SET v = v + 1;
    END WHILE;
END $$

DELIMITER ;

CALL load_data();
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
总结

通过上述步骤,你可以创建一个分区表,并使用一个用户定义函数来从字符串类型的主键 id 中提取整数部分,并将其转换为整数作为分区键。这种方法可以满足你在分区表中使用包含浮点数的字符串类型主键的需求,并根据整数部分进行分区。