当前位置: 首页 > 面试题库 >

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

金高飞
2023-03-14
问题内容

我有一种情况,我需要用一个替代键(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的分片表中是不可能的-
唯一键不能在各个分片之间有效实施。您的选择是:不要同时使用唯一键,也不要使该表成为参考表。



 类似资料:
  • 所以我有一个表,它用一个昵称作为外键,用一个id作为主键: 到目前为止,一切都很好。然而,每当我试图从发布中获取主键时,它告诉我:“没有唯一的约束来匹配引用表“信息”的给定键。 但是,如果我将表中的信息信息ID更改为唯一,错误就会消失。这是正确的做事方式吗? 提前感谢大家!

  • 我试图在一次迁移时在主键中做一个外键。 这是为Laravel 5.7。我尝试了不同的方法来实现我的目标。这是我的最终代码。 它生成一个普通表,其中“user_id”作为主键,但它不是外键。

  • 我有一个这样的实体: 多谢了,安德里亚

  • 问题内容: 我在一本书中遇到了以下SQL: 我想知道为什么在同一张表中需要一个PRIMARY和UNIQUE KEY?我想,这个问题的根源在于,PRIMARY和UNIQUE键之间有什么区别? 问题答案: 关系模型说,一个键和另一个键之间没有本质区别。也就是说,当一个关系具有多个候选键时,没有理论上的理由声明 该 键比 该 键更重要。从本质上讲,这意味着没有理论上的理由将一个键标识 为主键 ,而将所有

  • 本文向大家介绍主键和唯一键之间的区别,包括了主键和唯一键之间的区别的使用技巧和注意事项,需要的朋友参考一下 主键和唯一键都用于从表中获取记录。这些键还用于创建表之间的关系。主键和唯一键都用于唯一标识表中的记录。一个表只能有一个主键,而唯一键在一个表或关系中可以是多个。 以下是主键和唯一键之间的重要区别。 序号 键 首要的关键 唯一键 1 定义 主键用于唯一标识关系中的所有记录。 唯一键还用于唯一标

  • 本文向大家介绍主键与唯一键,包括了主键与唯一键的使用技巧和注意事项,需要的朋友参考一下 首要的关键 主键是一列,用于唯一地标识表的每个元组。 它用于向表添加完整性约束。一个表中只能使用一个主键。在主键的情况下,重复和NULL(空)值无效。主键也可以用作其他表的外键。 让我们举个例子 我们有一个表名employee,用于存储公司员工的数据。下表显示了该表的内容。 Emp_id 名称 号码 位置 薪水