小编典典

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

sql

我有一种情况,我需要用一个替代键(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字段添加为分片键,但没有用。

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中的这种情况?


阅读 229

收藏
2021-04-28

共1个答案

小编典典

因此,您想要唯一键(id)以及唯一键(project_id,dataset_id,table_id,view_name)吗?这在memsql的分片表中是不可能的-
唯一键不能在各个分片之间有效实施。您的选择是:不要同时使用唯一键,也不要使该表成为参考表。

2021-04-28