问题

在执行 insert into 语句的时候,报如题的错误:Duplicate entry '1207543053@qq.com' for key 'email'。一开始看以为是主键冲突,发现 email 并不是主键(主键也是特殊的 unique 索引)。想到 unique 索引。

索引如果是 primary、unique 这两种,那么数据表的数据对应的这个字段就必须保证其每条记录的唯一性。否则就会产生这个错误。

创建 unique 索引的方法

# 可以跟在创建表的语句后面
# unique key 索引名 (字段名)
UNIQUE KEY `email` (`email`)

# 也可以在表创建之后单独创建
# create unique index 索引名 on table(字段名)
CREATE UNIQUE INDEX email ON destoon_member(email);   

解决

针对存在 primary、unique 索引字段的表,需要在 create、update 的时候首先判断是否已存在相同字段值的记录(后端验证)。在创建和更新记录的 action 中添加相关数据验证即可。