【问题标题】:How to enforce UNIQUEness of spatial columns in MySQL?如何在 MySQL 中强制空间列的唯一性?
【发布时间】:2016-01-07 08:54:26
【问题描述】:

使用 MySQL 中的 MyISAM 存储引擎,我想强制表中 POLYGON 列的唯一性。基本上,如果我尝试插入重复项,我希望它会导致错误,或者只是被忽略。对于传统的列类型,这可以使用 UNIQUE 关键字来完成,但对于空间列,这会导致如下错误:

ERROR 1170 (42000): BLOB/TEXT column 'bounding_box' used in key specification without a key length

来自这个表定义:

CREATE TABLE IF NOT EXISTS quadrants ( id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, bounding_box POLYGON NOT NULL UNIQUE, centroid POINT NOT NULL UNIQUE, SPATIAL KEY bb_idx(bounding_box), SPATIAL KEY centroid_idx(centroid) ) ENGINE=MyISAM;

是否可以在 MySQL 中强制空间数据类型的唯一性?

编辑: 有人建议这是 MySQL error: key specification without a key length 的副本,但我相信它是不同的。该问题及其答案未提及空间数据类型。我只能推断POLYGON 实际上存储为BLOB,因此受到类似的约束。但是我仍然不知道是否有任何其他方法可以强制POLYGON 的唯一性---或者如果不是这种情况是否有实际的解决方法。

另一个问题解决了相同的错误,但在足够不同的上下文中,我觉得单独的问题很有用。

【问题讨论】:

标签: mysql spatial spatial-index


【解决方案1】:

由于空间列的存储方式与 blob 列类似,因此您应该创建两个索引:一个用于精确查询/唯一性的长度的非空间索引,以及一个用于范围查询的空间索引。此外,如果您的多边形不重叠,那么很小的长度就足够了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-06
    • 2011-02-18
    • 1970-01-01
    相关资源
    最近更新 更多