MemSQL - 在 table 创建中同时将代理键作为主键和不同的唯一键
MemSQL - Surrogate key as Primary and different unique keys at the same time in table creation
我有一种情况,我需要一个代理键 (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 中克服这种情况?
那么,您想要唯一键 (id) 以及唯一键 (project_id、dataset_id、table_id、view_name)?这在 memsql 中的分片 table 中是不可能的 - 无法跨分片有效地强制执行唯一键。您的选择是:不要同时使用两个唯一键,或者将 table 作为参考 table.
我有一种情况,我需要一个代理键 (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 中克服这种情况?
那么,您想要唯一键 (id) 以及唯一键 (project_id、dataset_id、table_id、view_name)?这在 memsql 中的分片 table 中是不可能的 - 无法跨分片有效地强制执行唯一键。您的选择是:不要同时使用两个唯一键,或者将 table 作为参考 table.