主复合键在两列上都不是唯一的

时间:2014-12-17 03:54:45

标签: mysql

我有一个包含两个标识列(id和ten​​ant_id)的表,但是当我执行INSERT ... ON DUPLICATE KEY UPDATE时,我很难强制执行数据完整性。

我有两个要求。

  1. id列必须始终是唯一的
  2. idtenant_id的组合应该始终是唯一的
  3. 模式

    |id        |int     |AUTO_INCREMENT |PRIMARY
    |tenant_id |int     |               |PRIMARY
    |name      |varchar |
    

    数据

    |id    |tenant_id  |name
    ------------------------------
    |1     |2          |Some name
    |2     |1          |Other name
    |3     |2          |Another name
    

    当我在idtenant_id之间定义复合主键并运行INSERT ... ON DUPLICATE KEY UPDATE时,id列允许插入重复的ID。

    所以我最终得到了

    |id    |tenant_id  |name
    ------------------------------
    |1     |1          |NEW DATA
    |1     |2          |Some name
    |2     |1          |Other name
    |3     |2          |Another name
    

    我尝试过使用主索引和唯一索引的大量组合,但我无法让数据服从列上的自动增量和主键(所以在上面的例子中&#39 ;新数据应该采用4的新ID。

1 个答案:

答案 0 :(得分:0)

然后只有第一个要求才真正重要。如果第一列总是不同(唯一),那么与第二列的组合也只能是唯一的。