MySQL Key Constraint - PullRequest
       30

MySQL Key Constraint

2 голосов
/ 18 мая 2011

У меня есть таблица MySQL с двумя полями: a (int) и b (string) с использованием механизма InnoDB.

Я хочу структурировать его так, чтобы конкретное значение b могло появляться в таблице произвольное количество раз, но каждый раз, когда оно появляется, оно всегда должно появляться с одним и тем же значением a, т.е. предположим, что моя таблица выглядит следующим образом:

(a,b)
(1,'foo')
(2,'bar')
(2,'bar')
(2,'baz')

Я должен быть в состоянии успешно вставить (1, 'foo'), (2, 'bar') или даже (2, 'qux') в таблицу, но вставки (2, 'foo'), ( 1, 'bar') или (1, 'baz') должны завершиться ошибкой, потому что всякий раз, когда появляются эти строковые значения b, они всегда должны появляться с одинаковым значением a.

Есть идеи, как это сделать эффективно? Я играл с транзакциями и SELECT ... FOR UPDATE, но не повезло. У меня неправильная структура таблицы?

Ответы [ 2 ]

1 голос
/ 24 мая 2011

Я закончил тем, что использовал утверждение типа:

 INSERT INTO mytable(`a`,`b`) SELECT 1,'foo' FROM dual WHERE NOT EXISTS
 (SELECT * FROM mytable WHERE a != 1 AND b = 'foo')

Который будет вставлять строку, только если вложенный выбор не возвращает строк.

0 голосов
/ 18 мая 2011

что-то вроде

если существует (выберите ноль из mytable, где a! = Prm_a и b = prm_b), тогда вставить в ... еще повышение конец;

...