Нямате уникален ключ за имейл адреса . Това е най-голямата ви надежда, тъй като много John Doe могат да бъдат в системата. Така че уникален съставен индекс на пълното име никога не е добра идея.
Човек може да издаде INSERT IGNORE, което се промъква след дублирано нарушение, сякаш нищо не се случва (това е силно непрепоръчително и във вашия случай не е възможно, защото вашето уникално ограничение за имейл не е налице). Основният проблем при това е, че сте склонни (прочетете:вероятно ще) да загубите пълен контрол над потока на случващото се и да останете с нежелани данни. Така че не го използвайте, освен ако не сте професионалист.
Човек може да издаде и ВМЪКНЕТЕ НА АКТУАЛИЗАЦИЯ НА ДУБЛИРАН КЛЮЧ (известен още като IODKU), който също изисква уникален ключ (може да бъде и уникален съставен). Като такъв няма да се появи нов ред, а актуализация на реда. Като пример може да се вмъкне нов ред с 4 колони, но при нарушение на дублирането може да се извърши актуализация само на две от колоните, като например
приемайки по-долу PK на невиждана колона id int
и уникален ключ на emailAddr
insert person(firstName,lastName,emailAddr) values 'Joe','Smith','[email protected]'
on duplicate key update firstName='Joe',lastName='Smith'
Това е уникалният ключ на emailAddr, който прави тази работа. Останал само с 1 ред на emailAddr досега.
Така че можете да имате неограничен брой Joe Smiths, но само 1 ред на имейл адрес.
Таблицата за създаване на горната таблица може да изглежда така
create table person
( id int auto_increment primary key,
firstName varchar(50) not null,
lastName varchar(50) not null,
emailAddr varchar(150) not null,
unique key(emailAddr) -- without this, IODKU will not work
);
Можете също така да подадете команди ALTER TABLE, за да добавите ограничения, след като таблицата е създадена. В зависимост от данните в него обаждането може да е неуспешно.
Mysql Вмъкване при актуализация на дублиран ключ и Промяна на таблица страници с ръководство.
Ще го кажа отново, без правилната настройка на схемата IODKU няма да работи и ще останете с нежелани редове. Така че не бъдете мързеливи за това. Схема за настройка първо позволявайки му да успее (с уникални ключове),тогава преминете към използване на IODKU.