为什么建了唯一索引,还能写入重复数据

fujianelfs 2015-09-13 10:18:01
为什么能写入重复数据呢?在存在唯一索引前提下。请大神帮忙解惑,谢谢
唯一索引:UNIQUE KEY `uwu` (`UserId`,`WeixinOpenid`,`UnionID`),

1:表结构信息如下:
CREATE TABLE `t_weixin` (
`WeixinId` bigint(20) NOT NULL AUTO_INCREMENT,
`MallId` bigint(20) DEFAULT NULL,
`UserId` bigint(20) DEFAULT NULL,
`RefereeUserId` bigint(20) DEFAULT NULL,
`WeixinOpenid` varchar(100) NOT NULL,
`Attentiontime` datetime DEFAULT NULL,
`UnionID` varchar(100) NOT NULL,
`HeadPic` varchar(255) DEFAULT NULL,
`Nickname` varchar(100) DEFAULT NULL,
`Type` int(1) DEFAULT NULL,
`AppId` varchar(100) DEFAULT NULL,
PRIMARY KEY (`WeixinId`),
UNIQUE KEY `uwu` (`UserId`,`WeixinOpenid`,`UnionID`),
KEY `FK_Reference_53` (`MallId`),
KEY `FK_Reference_54` (`UserId`),
KEY `FK_Reference_55` (`RefereeUserId`),
CONSTRAINT `FK_Reference_53` FOREIGN KEY (`MallId`) REFERENCES `t_mall` (`MallId`),
CONSTRAINT `FK_Reference_54` FOREIGN KEY (`UserId`) REFERENCES `t_user` (`UserId`),
CONSTRAINT `FK_Reference_55` FOREIGN KEY (`RefereeUserId`) REFERENCES `t_user` (`UserId`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8


2:
...全文
753 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Life_0_1 2015-09-14
  • 打赏
  • 举报
回复
3个里面只要有一个不同就可以是唯一索引了
LongRui888 2015-09-14
  • 打赏
  • 举报
回复 1
这里的问题是 unique 索引,允许列中有null值,而由于null值扫描也不是,所以null 和null 也是不同的。 所以你贴出来的数据中,由于userid两行都是null,所以这两行数据也是不同的。 如果你希望实现唯一的,那么只能用主键,但是你的表已经有一列自增的列,做成主键了,所以 userid DEFAULT NULL改成 userid DEFAULT xxx
rick-he 2015-09-13
  • 打赏
  • 举报
回复
null不是。你可以将这个改为相同的试下

56,687

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧