У меня есть простая таблица с двумя столбцами, каждый столбец является ключевым значением. значения, хранящиеся в каждом поле, являются varchar (45), представляющими адрес электронной почты и ключевое слово. Возможно, что собранная информация может дублировать себя, поскольку она связана с сбором данных о просмотре сайтов. Во избежание дублирования записей, я использовал пытались использовать INSERT IGNORE в, REPLACE в, и, наконец, я пытаюсь следующее:MySql «INSERT ... ON DUPLICATE KEY UPDATE» все еще вставляет повторяющиеся записи. Что мне не хватает?
insert into <table name> (user_email, key_token) values ('<email>@<this>.com', 'discountsupplies') on duplicate key update user_email='<email>@<this>.com',key_token='discountsupplies';
, но я до сих пор видим повторяющиеся записи вставляются в таблицу. SQL, который сгенерировал таблицу:
DROP TABLE IF EXISTS `<database name>`.`<table name>` ;
CREATE TABLE IF NOT EXISTS `<database name>`.`<table name>` (
`user_email` VARCHAR(45) NOT NULL ,
`key_token` VARCHAR(45) NOT NULL,
PRIMARY KEY (`user_email`, `key_token`))
ENGINE = InnoDB;
В то время как я видел несколько вопросов, которые были близки к этому, я не видел ни одного, что имя, почему это может происходить, и я хотел бы понять, что я Не понимаю этого поведения. Любая помощь приветствуется.
В качестве дополнения, после добавления UNIQUE KEY заявления, я вернулся и попытался как REPLACE и INSERT IGNORE для достижения своей цели, и ни один из этих вариантов не является исключением повторяющихся записей.
Также добавляет: УНИКАЛЬНЫЙ ИНДЕКС (user_email
, key_token
) также не помогает.
Я собираюсь сделать эту проверку через ручную процедуру поиска, пока не смогу это понять. Если я найду ответ, я буду рад обновить сообщение.
Добавлен уникальный индекс строки ниже первоначального создания таблицы заявления -
-- -----------------------------------------------------
-- Table `<db name>`.`<table name>`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `<db name>`.`<table name>` ;
CREATE TABLE IF NOT EXISTS `<db name>`.`<table name>` (
`user_email` VARCHAR(45) NOT NULL ,
`key_token` VARCHAR(45) NOT NULL,
PRIMARY KEY (`user_email`, `key_token`),
UNIQUE KEY (user_email),
UNIQUE KEY (key_token)
)
ENGINE = InnoDB;
CREATE UNIQUE INDEX ix_<table name>_useremail on `<db name>`.`<table name>`(user_email);
CREATE UNIQUE INDEX ix_<table name>_keytoken on `<db name>`.`<table name>`(key_token);
это, кажется, нормально (без ошибок при создании таблиц во время шага источника), но я все еще получаю дубликаты при запуск дублирующего запроса.
Что вы имеете в виду дублей? У вас есть два одинаковых письма в одном столбце (с 'UNIQUE', определенным в этом столбце)? – Quassnoi
Не могли бы вы опубликовать некоторые данные, которые вы согласуете с дубликатом? – Quassnoi
Это первый появившийся фрагмент «вырезанный и вставленный» из таблицы (электронная почта была изменена с оригинального адреса для конфиденциальности), которая демонстрирует дублирование. Третья запись добавляется, хотя первая запись явно находится в таблице. [email protected] \t Tempurpedic-кровать [email protected] \t дети безопасности-ворот [email protected] \t Tempurpedic-кровать – 2009-10-08 15:23:41