我有一个简单的表,有两列,每一列都是一个键值。每个字段中存储的值是 varchar(45),表示电子邮件地址和关键字。收集的信息可能会重复,因为它与网站浏览数据收集有关。为了避免重复条目,我曾经尝试使用 INSERT IGNORE into,REPLACE into,最后我尝试以下操作:
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 来实现我的目标,并且这些选项都没有排除重复条目。
还补充说: UNIQUE INDEX ( 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);
似乎没问题(在源步骤期间创建表时没有错误),但是在运行重复查询时我仍然得到重复。