как правильно использовать индекс UNIQUE? - PullRequest
0 голосов
/ 11 августа 2010

У меня есть 4 поля в DB.i, чтобы они стали дублирующимися записями.

1. Model     Varchar(14)     Unique
2. Serial    varchar(8)      Unique
3. Lot       varchar(5)      Unique
4. Line      char(5)         Unique


                    Model         Serial             Lot             Line
First data        remocon         x0001              033a            fa 01

и если я ввел те же данные, он не может быть записан.

 remocon         x0001              033a            fa 01

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

remocon        x0002        033a            fa 01

и я хочу получить результат как:

 Model         Serial             Lot             Line
remocon         x0001             033a            fa 01
remocon         x0002             033a            fa 01

Ответы [ 2 ]

6 голосов
/ 11 августа 2010

Вам необходимо добавить уникальное ограничение для всех полей, а не для каждого, т. Е.

UNIQUE (модель, серийный номер, лот, линия)

Решение:

CREATE TABLE YourTable
(
 Model     Varchar(14)     NOT NULL,
 Serial    varchar(8)      NOT NULL,
 Lot       varchar(5)      NOT NULL,
 Line      char(5)         NOT NULL,
 unique    (model, serial, lot, line) 

)

для существующей таблицы:

 alter table YourTableName drop index model;
 alter table YourTableName drop index serial;
 alter table YourTableName drop index lot;
 alter table YourTableName drop index line;
 alter table YourTableName add unique (model, serial, lot, line); 
0 голосов
/ 11 августа 2010

Если вы создаете ограничение Unique для каждого поля, каждое поле должно иметь уникальные данные. Вам нужно создать УНИКАЛЬНЫЙ со всеми полями, которые нельзя повторить.

UNIQUE(Model, Serial, Lot, Line)

Но если все ваши поля должны быть уникальными, я думаю, что ваша таблица не имеет первичного ключа, и вы должны создать ПЕРВИЧНЫЙ КЛЮЧ всех полей вместо УНИКАЛЬНОГО.

...