根据当前日期将分区添加到现有 table
Add partitions to existing table based on current date
我想将现有的 table 分成 3 个分区。在更新我们的解决方案时,powershell 脚本将连接到 MySQL 服务器并执行脚本文件。
我尝试了以下添加分区的查询:
Alter Table `mytable`
PARTITION BY RANGE (TO_DAYS(`TimeStart`))
(
PARTITION start VALUES LESS THAN (0),
PARTITION "from"+(curdate()+0) VALUES LESS THAN (curdate()+1),
PARTITION future VALUES LESS THAN MAXVALUE
);
列 timestart
(datetime(3) NOT NULL
) 是主键的一部分。
中间的分区需要特定值以使其与 Windows 服务的维护查询 运行 在某个时间间隔兼容。
查询失败有两个不同的原因:
分区名称的创建:我想得到例如"from20180220" 今天执行脚本的时间。
错误消息是
错误代码:1064。您的 SQL 语法有误;查看与您的 MySQL 服务器版本对应的手册,了解在 '"from"+(curdate()+0) VALUES LESS THAN (curdate()+1), PARTITION future ' 附近使用的正确语法第 5 行
创建分区值。当今天(2 月 19 日)的脚本是 运行 时,我想要一个等同于 VALUES LESS THAN (TO_DAYS('2018-2-20')
的脚本。
错误代码:1064。在第 5 行
[=41]'), PARTITION future VALUES LESS THAN MAXVALUE )' 附近不允许(子)分区函数中的常量、随机或时区相关表达式=]
我也试过 TO_DAYS(curdate())+1
。其实没想到MySQL会有闭包...
如何解决这些错误?
您正试图在数据定义代码中使用 MySQL data-manipulation-language 函数,例如 CURDATE()
和 TO_DAYS()
。你不能那样做™。
您需要编写某种程序来写出一个包含您的 Alter Table
命令的小文件,然后 运行 该文件在 MySQL.
O.Jones 的解释有点太短了。
您需要使用其他语言脚本,例如 php、perl、python ...
然后写一些有用的东西:
Alter Table `mytable`
PARTITION BY RANGE (TO_DAYS(`TimeStart`))
(
PARTITION start VALUES LESS THAN (0),
PARTITION from".$curdate." VALUES LESS THAN TO_DAYS(".$nextdateTime."),
PARTITION future VALUES LESS THAN MAXVALUE
);
我想将现有的 table 分成 3 个分区。在更新我们的解决方案时,powershell 脚本将连接到 MySQL 服务器并执行脚本文件。
我尝试了以下添加分区的查询:
Alter Table `mytable`
PARTITION BY RANGE (TO_DAYS(`TimeStart`))
(
PARTITION start VALUES LESS THAN (0),
PARTITION "from"+(curdate()+0) VALUES LESS THAN (curdate()+1),
PARTITION future VALUES LESS THAN MAXVALUE
);
列 timestart
(datetime(3) NOT NULL
) 是主键的一部分。
中间的分区需要特定值以使其与 Windows 服务的维护查询 运行 在某个时间间隔兼容。
查询失败有两个不同的原因:
分区名称的创建:我想得到例如"from20180220" 今天执行脚本的时间。 错误消息是
错误代码:1064。您的 SQL 语法有误;查看与您的 MySQL 服务器版本对应的手册,了解在 '"from"+(curdate()+0) VALUES LESS THAN (curdate()+1), PARTITION future ' 附近使用的正确语法第 5 行
创建分区值。当今天(2 月 19 日)的脚本是 运行 时,我想要一个等同于
VALUES LESS THAN (TO_DAYS('2018-2-20')
的脚本。错误代码:1064。在第 5 行
[=41]'), PARTITION future VALUES LESS THAN MAXVALUE )' 附近不允许(子)分区函数中的常量、随机或时区相关表达式=]
我也试过 TO_DAYS(curdate())+1
。其实没想到MySQL会有闭包...
如何解决这些错误?
您正试图在数据定义代码中使用 MySQL data-manipulation-language 函数,例如 CURDATE()
和 TO_DAYS()
。你不能那样做™。
您需要编写某种程序来写出一个包含您的 Alter Table
命令的小文件,然后 运行 该文件在 MySQL.
O.Jones 的解释有点太短了。
您需要使用其他语言脚本,例如 php、perl、python ...
然后写一些有用的东西:
Alter Table `mytable`
PARTITION BY RANGE (TO_DAYS(`TimeStart`))
(
PARTITION start VALUES LESS THAN (0),
PARTITION from".$curdate." VALUES LESS THAN TO_DAYS(".$nextdateTime."),
PARTITION future VALUES LESS THAN MAXVALUE
);