首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不允许(子)分区函数中的常数、随机或时区相关表达式。

不允许(子)分区函数中的常数、随机或时区相关表达式。
EN

Stack Overflow用户
提问于 2019-02-19 07:22:51
回答 1查看 893关注 0票数 0

我的表像这样:

代码语言:javascript
复制
CREATE TABLE `test1` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `project_id` int(11) NOT NULL,
    `md5` varchar(255) NOT NULL,
    `create_time` datetime NOT NULL,
    `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`,`project_id`,`md5`),
    KEY `index_id` (`md5`),
) ;

我想用md5project_id进行分区。所以我创建了一个函数:

代码语言:javascript
复制
CREATE FUNCTION f2(md5 VARCHAR(255), project_id int(11))
RETURNS int
return MOD(md5, 10) + project_id;

当我对此表进行分区时,请使用以下sql:

代码语言:javascript
复制
ALTER TABLE test1 PARTITION BY HASH(f2(md5, project_id)) PARTITIONS 100;

它显示:

不允许(子)分区函数中的常数、随机或时区相关表达式.

但答案并不是常数、随机性和时区依赖性的。所以我不知道怎么用身份证,谁能帮我?非常感谢。

EN

回答 1

Stack Overflow用户

发布于 2019-02-19 07:28:57

如果在MySQL上浏览散列分区文档,您将看到某些构造是禁止分区

禁止的建筑。在对表达式进行分区时不允许使用下列构造: 存储过程、存储函数UDF或插件。 声明变量或用户变量。

为了解决这一问题,只需插入UDF函数后面的逻辑:

代码语言:javascript
复制
ALTER TABLE test1 PARTITION BY HASH(MOD(md5, 10) + project_id) PARTITIONS 100;

即使一个函数可以发挥作用,它也可能不是那样的表演性,直接表达是更好的方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54760736

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档