Предотвращение двойной вставки MySQL

У меня есть таблица, более или менее похожая на

Name | Lastname | ID | Date 

Есть ли способ запретить базе данных выполнять функцию вставки, если человек, который такой Name, Lastname и ID, уже существует, без выполнения дополнительных запросов на его поиск?


person user2228063    schedule 02.04.2013    source источник


Ответы (1)


добавить ограничение UNIQUE для столбцов,

ALTER TABLE TableName ADD CONSTRAINT tb_uq UNIQUE (ID, LastName)

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

INSERT INTO tableName (ID, LASTNAME) VALUES (1, 'hello') // ok
INSERT INTO tableName (ID, LASTNAME) VALUES (2, 'hello') // ok
INSERT INTO tableName (ID, LASTNAME) VALUES (1, 'hello') // failed
person John Woo    schedule 02.04.2013
comment
Кажется, это то, что мне нужно! Спасибо! - person user2228063; 02.04.2013
comment
Если вы хотите, чтобы запрос корректно завершился ошибкой, вы также можете добавить дополнительное предложение ON DUPLICATE KEY UPDATE ID = ID; в конце. - person Purpletoucan; 02.04.2013
comment
Я был бы склонен оставить его неизящным, чтобы вы могли справиться с этим в приложении, но опять же все зависит от намерений пользователей. - person Simon at My School Portal; 02.04.2013
comment
@Simonatmso.net да, все зависит от пользователя :) - person John Woo; 02.04.2013
comment
@JW из интереса есть какая-то конкретная причина для ОГРАНИЧЕНИЯ вместо УНИКАЛЬНОГО КЛЮЧА? Я всегда использовал UNIQUE KEY сам, но если есть причина производительности, было бы неплохо знать для дальнейшего использования. Если они не считаются идентичными, конечно :) - person Simon at My School Portal; 02.04.2013
comment
@Simonatmso.net Какова цель именования CONSTRAINT - person John Woo; 02.04.2013