Предотвратяване на двойно вмъкване на 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)

след като бъде приложен, ако се опитате да вмъкнете стойност, чийто 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