У меня есть ситуация, когда мне нужен суррогатный ключ (id
) вместо составного ключа (4 поля объединены, чтобы быть уникальным: project_id, dataset_id, table_id, view_name
), чтобы легко сослаться на это в других таблицах.MemSQL - ключ суррогата как первичный и разные уникальные ключи одновременно с созданием таблицы
Для этого я использовал 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?
Спасибо, я буду создавать уникальный ключ на основе всех других уникальных ключей из кода и вставить его в качестве первичного ключа в ту же таблицу. –