MemSQL - 在表创建中同时代理键作为主键和不同的唯一键

时间:2016-11-10 04:48:18

标签: mysql sql memsql

我有一种情况,我需要有一个代理键(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中克服这种情况?

1 个答案:

答案 0 :(得分:1)

那么,您需要唯一键(id)以及唯一键(project_id,dataset_id,table_id,view_name)吗?这在memsql的分片表中是不可能的 - 不能在分片中有效地强制执行唯一键。您可以选择:不要同时使用两个唯一键,也不要将表作为参考表。