2015-11-19 3 views
0

Мне любопытно, есть ли способ вставить в MySQL и избежать дубликатов. Я знаю, что есть три основных способа его достижения. Либо заменить, либо вставить игнорировать, либо вставить дубликат. Я считаю, что каждый из них полагается на уникальный первичный ключ, который для меня - это поле auto increment id. Это поле идентификатора не имеет никакого значения для меня особенно вставок нужно вместо этого я хочу, чтобы проверить, если несколько полей содержат одинаковое значение, если не DonT страховатьВставить игнорировать несколько уникальных данных столбцов

например:

INSERT INTO table (name, team, email) VALUES (:n, :t, :e) 

если я имел три набора данных, как так

1) array (":n" => "john doe", ":t" => 1, ":e" => [email protected]); 
2) array (":n" => "Jane doe", ":t" => 1, ":e" => [email protected]); 
3) array (":n" => "john doe", ":t" => 1, ":e" => [email protected]); 
4) array (":n" => "john doe", ":t" => 2, ":e" => [email protected]); 

Предполагая, нет значения в таблице

1, 3 и 4 будут включены, но 2 не будет, как команда и адрес электронной почты не являются уникальными

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

Благодаря

ответ

0

Если id поле не имеет значения для вас, не беспокоить с ним. Желаемое поведение, которое вы описываете, относится к composite key, поэтому создайте составной ключ.

Во-первых, ломом тот, который существует и не имеет значения ...

ALTER TABLE YourTableName DROP PRIMARY KEY;

Затем создать новый композиционный один ...

ALTER TABLE YourTableName ADD PRIMARY KEY (name, team, email);

+0

Составной ключ - так просто! –

1

Вы можете создать UNIQUE ограничение

ALTER TABLE `tableName` ADD UNIQUE `unique_idx`(`name`, `team`, `email`); 
0

Вы можете попробовать использовать DUAL

INSERT INTO table (name, team, email) 
SELECT :n, :t, :e 
FROM DUAL 
WHERE :t NOT IN (SELECT team FROM table WHERE email = :e) 
Смежные вопросы