У меня есть таблица с двумя столбцами идентификации (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 |tenant_id |name
------------------------------
|1 |1 |NEW DATA
|1 |2 |Some name
|2 |1 |Other name
|3 |2 |Another name
Я пробовал большое количество комбинаций с первичным и уникальным индексом, но я не могу получить данные подчиняться автоматическим инкремент и первичный ключ на колонке (так в в приведенном выше примере «новые данные» должны были принять новый идентификатор 4).
Почему у вас есть составной ПК, если одно из ваших полей ДОЛЖНО быть уникальным? –
Его хороший вопрос, я не нашел способ сделать INSERT ... ON DUPLICATE KEY UPDATE правильно, если я не укажу составной первичный ключ или уникальный агрегированный индекс в столбцах id и tenant_id – Tim