【问题标题】:MemSQL - Surrogate key as Primary and different unique keys at the same time in table creationMemSQL - 在表创建中同时将代理键作为主键和不同的唯一键
【发布时间】:2017-03-24 00:58:21
【问题描述】:

我有一种情况,我需要一个代理键 (id) 来代替复合键(4 个字段组合为唯一:project_id, dataset_id, table_id, view_name),以便在其他表中轻松引用它。

为此,我使用id 字段作为主键,并使用上面提到的其他 4 个字段作为唯一键。这在 MySQL 中是允许的,但在 MemSQL 中是不允许的。

Error Code: 1895. The unique key named: 'project_id' must contain all columns specified in the primary key when no shard key is declared

所以我添加了 id 字段作为 Shard 键,但没有用。

CREATE TABLE `table_access_details` (
  `id` integer primary key,
  `project_id` varchar(1024) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `dataset_id` varchar(1024) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
  `table_id` varchar(1024) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
  `view_name` varchar(1024) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL ,
  `upload_id` decimal (14,0) DEFAULT NULL,
  `modified_datetime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `created_datetime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  #SHARD KEY (`id`),
  unique(`project_id`,`dataset_id`,`table_id`,`view_name`)
);

如何在 MemSQL 中克服这种情况?

【问题讨论】:

    标签: mysql sql singlestore


    【解决方案1】:

    那么,您想要唯一键 (id) 和唯一键(project_id、dataset_id、table_id、view_name)吗?这在 memsql 的分片表中是不可能的 - 无法跨分片有效地强制执行唯一键。您的选择是:不要同时使用唯一键,或将表设为引用表。

    【讨论】:

    • 谢谢,我将根据代码中的所有其他唯一键创建一个唯一键,并将其作为主键插入到同一张表中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-26
    • 2011-03-26
    • 2012-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多