如何在MySQL中强制实现空间列的独特性?

时间:2016-01-07 08:54:26

标签: mysql spatial spatial-index

在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的唯一性 - 或者是否存在实际的解决方法,如果不是这样的话。

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

1 个答案:

答案 0 :(得分:0)

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