使用组合键访问数据

时间:2019-06-14 14:24:04

标签: mysql composite-key

我似乎对理解如何使用组合键有疑问。设置一个似乎没问题。但是,找不到如何使用它的示例。

我的想法是可以选择说 select * from tableA where primary_key = something 是单个主键还是复合键,无需赘述。

MySQL通过级联发出有关重复的复合键的信息。因此,例如,复合键由以下几列组成:(id_company_subsid,id_company,id_subsidiary,company_subsidiary_start),因此复合键的输出形式为:

Duplicate entry '92078-2706-6552-2010-12-31' for key 'PRIMARY'

是否可以以类似方式构建查询?即select * from tableA where primary_key = '92078-2706-6552-2010-12-31'和MySQL会弄清楚如何使用它?它将与预设组合键中的所有列进行匹配吗?

修改/说明: 此问题的解决方案是在具有相同架构的表相互比较的自动软件中使用。具有各种主键的表(有些是单键,有些是组合键)。表格按原样出现。

每个表都添加了一个列,该列具有该行中所有其他列的哈希值。这用于表之间的比较。

目标是通过两个表的两个列(主键+哈希列)内部联接,以找出它们之间的差异。

2 个答案:

答案 0 :(得分:0)

在每个单独的列上都包含一个条件,就像这样:

SELECT ....
  FROM t
 WHERE t.fee = '92078'
   AND t.fi  = '2706'
   AND t.fo  = '6552'
   AND t.fum = '2010-12-31'    

没有机制可以为此指定“主键”或“唯一键”或任何“键”上的条件。表由列组成,请参阅各列。

我们可以使用引用列的表达式。我们可以创建一个这样的表达式:

CONCAT(t.fee,'-',t.fi,'-',t.fo,'-',t.fum)

但是我们不想在WHERE子句中对该表达式使用相等比较,因为那样将无法有效地使用索引。这将迫使MySQL对表中的每一行求值。

答案 1 :(得分:0)

根据@ spencer7593对他的回答的评论。看来我的目标无法以这种方式实现。每个主键列都必须单独寻址。

@ spencer7593澄清评论:

  

@Rob:否,不是在MySQL查询的上下文中,该查询不会基于主键中的列的值来检索行,否– spencer7593 6月14日15:25