我有一个包含两个标识列(id和tenant_id)的表,但是当我执行INSERT ... ON DUPLICATE KEY UPDATE
时,我很难强制执行数据完整性。
我有两个要求。
id
列必须始终是唯一的id
和tenant_id
的组合应该始终是唯一的模式
|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
当我在id
和tenant_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。
答案 0 :(得分:0)
然后只有第一个要求才真正重要。如果第一列总是不同(唯一),那么与第二列的组合也只能是唯一的。