КЛЮЧ НА ДУБЛИКЕ: уникальное ограничение для нескольких столбцов - PullRequest
6 голосов
/ 31 июля 2011

Прямо сейчас у меня есть:

INSERT INTO mytable (a,b,c,d) VALUES(1,2,3,4)
  ON DUPLICATE KEY UPDATE c=VALUES(c),d=VALUES(d)

, который работает, если a или b являются UNIQUE клавишами ...

Но теперь я хочу ОБНОВИТЬ только тогда, когда в таблице нет другой строки с парой (a, b) (в противном случае пропустите вставку).

В основном (a,b) должен быть УНИКАЛЬНЫМ , а не (a) или (b), но оба связаны.

Например, эти строки будут действительными

ID (auto-inc) | a | b |  c  | d
            0 | 5 | 1 | 343 |466
            1 | 5 | 2 | 363 |466
            2 | 5 | 3 | 343 |496
            3 | 7 | 1 | 343 |496

Потому что есть 5,1, 5,2, 5.3, 7.1 и т. Д.

Но строка № 2 здесь должна считаться дубликатом строки № 1, поэтому строка № 1 должна быть обновлена:

ID (auto-inc) | a | b |  c  | d
            0 | 5 | 1 | 343 |466
            1 | 5 | 1 | 363 |466
            2 | 5 | 3 | 343 |496
            3 | 7 | 1 | 343 |496

Возможно ли это?

Ответы [ 3 ]

13 голосов
/ 31 июля 2011

сделать UNIQUE KEY до (a,b) не до b

ALTER TABLE tblname ADD UNIQUE (a,b)
1 голос
/ 19 октября 2016

Стоит отметить, что если вы попытаетесь добавить ADD UNIQUE (a, b), пока в таблице есть данные, вы, вероятно, получите ошибку дублирующего ключа.Очистите таблицу, добавьте уникальный индекс, и он будет работать.

1 голос
/ 31 июля 2011
CREATE UNIQUE INDEX index_unique_on_a_and_b ON mytable (a,b)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...