У меня есть простая таблица с двумя столбцами, каждый столбец является ключевым значением. в каждом поле хранятся значения varchar (45), представляющие адрес электронной почты и ключевое слово. Вполне возможно, что собранная информация может дублировать себя, поскольку она связана со сбором данных о просмотре сайта. Чтобы избежать повторяющихся записей, я пытался использовать INSERT IGNORE в, REPLACE в, и, наконец, я пытаюсь сделать следующее:
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);
кажется, что все в порядке (нет ошибок при создании таблиц на этапе исходного кода), но я все еще получаю дубликаты при выполнении запроса на дубликаты.