我有一种情况,我需要用一个替代键(id)来代替组合键(组合在一起的4个字段是唯一的project_id, dataset_id, table_id, view_name:),以便在其他表中轻松引用它。
id
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的分片表中是不可能的- 唯一键不能在各个分片之间有效实施。您的选择是:不要同时使用唯一键,也不要使该表成为参考表。