我有一种情况,我需要有一个代理键(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中克服这种情况?
答案 0 :(得分:1)
那么,您需要唯一键(id)以及唯一键(project_id,dataset_id,table_id,view_name)吗?这在memsql的分片表中是不可能的 - 不能在分片中有效地强制执行唯一键。您可以选择:不要同时使用两个唯一键,也不要将表作为参考表。