2014-12-17 3 views
0

У меня есть таблица с двумя столбцами идентификации (id и tenant_id), но я с трудом применяю целостность данных при выполнении INSERT ... ON DUPLICATE KEY UPDATE.Первичный составной ключ не является уникальным для обоих столбцов.

У меня есть два требования.

  1. id столбец всегда должен быть уникальным
  2. сочетание 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 |tenant_id |name 
------------------------------ 
|1  |1   |NEW DATA 
|1  |2   |Some name 
|2  |1   |Other name 
|3  |2   |Another name 

Я пробовал большое количество комбинаций с первичным и уникальным индексом, но я не могу получить данные подчиняться автоматическим инкремент и первичный ключ на колонке (так в в приведенном выше примере «новые данные» должны были принять новый идентификатор 4).

+0

Почему у вас есть составной ПК, если одно из ваших полей ДОЛЖНО быть уникальным? –

+0

Его хороший вопрос, я не нашел способ сделать INSERT ... ON DUPLICATE KEY UPDATE правильно, если я не укажу составной первичный ключ или уникальный агрегированный индекс в столбцах id и tenant_id – Tim

ответ

0

Тогда только первое требование на самом деле имеет значение. Если первый столбец всегда отличается (уникальным), то комбинация со вторым столбцом также может быть уникальной.

Смежные вопросы