为什么能写入重复数据呢?在存在唯一索引前提下。请高手帮忙解惑,谢谢
唯一索引: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:
唯一索引: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:
解决方案
10
null不是。你可以将这个改为相同的试下
30
这里的问题是 unique 索引,允许列中有null值,而由于null值扫描也不是,所以null 和null 也是不同的。
所以你贴出来的数据中,由于userid两行都是null,所以这两行数据也是不同的。
假如你希望实现唯一的,那么只能用主键,但是你的表已经有一列自增的列,做成主键了,所以 userid DEFAULT NULL改成
userid DEFAULT xxx
所以你贴出来的数据中,由于userid两行都是null,所以这两行数据也是不同的。
假如你希望实现唯一的,那么只能用主键,但是你的表已经有一列自增的列,做成主键了,所以 userid DEFAULT NULL改成
userid DEFAULT xxx