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

为什么能写入重复数据呢?在存在唯一索引前提下。请高手帮忙解惑,谢谢

唯一索引: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:

d0973e2b7ffe0466ffd115540d2b9e07.png

解决方案

10

null不是。你可以将这个改为相同的试下

30

这里的问题是 unique 索引,允许列中有null值,而由于null值扫描也不是,所以null 和null 也是不同的。

所以你贴出来的数据中,由于userid两行都是null,所以这两行数据也是不同的。

假如你希望实现唯一的,那么只能用主键,但是你的表已经有一列自增的列,做成主键了,所以 userid DEFAULT NULL改成

userid DEFAULT xxx

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明为什么建了唯一索引,还能写入重复数据!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值