需求:需要用mallId、keyword、batchId三个字段来组成唯一键,防止三个参数完全相同的数据插入数据库;但是有一种情况,keyword和batchId字段不会同时存在,总有一个字段为空。
错误建表语句如下:
coupon_batchid_keyword | CREATE TABLE `coupon_batchid_keyword` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',
`mallId` varchar(10) DEFAULT NULL COMMENT 'mallId',
`keyword` varchar(100) DEFAULT NULL COMMENT '屏蔽的关键词',
`batchId` varchar(40) DEFAULT NULL COMMENT 'batchId',
`insertTime` varchar(40) DEFAULT NULL COMMENT '插入时间',
`isDelete` varchar(4) DEFAULT '0' COMMENT '是否删除',
`updateTime` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
PRIMARY KEY (`id`),
UNIQUE KEY `unique1` (`mallId`,`keyword`,`batchId`)
) ENGINE=InnoDB AUTO_INCREMENT=344 DEFAULT CHARSET=utf8 COMMENT='屏蔽券信息';
经测试,效果达不到目的,原因如下:
这种情况下必须保持三个字段都存在,不能有任何一个字段空着,如果batchId这个字段为空,那么就会存在相同的mallId、keyword数据存在,导致重复数据的产生。
正确建表语句如下:
coupon_batchid_keyword | CREATE TABLE `coupon_batchid_keyword` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',
`mallId` varchar(10) DEFAULT NULL COMMENT 'mallId',
`keyword` varchar(100) DEFAULT NULL COMMENT '屏蔽的关键词',
`batchId` varchar(40) DEFAULT NULL COMMENT 'batchId',
`insertTime` varchar(40) DEFAULT NULL COMMENT '插入时间',
`isDelete` varchar(4) DEFAULT '0' COMMENT '是否删除',
`updateTime` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
PRIMARY KEY (`id`),
UNIQUE KEY `unique1` (`mallId`,`keyword`),
UNIQUE KEY `unique2` (`mallId`,`batchId`)
) ENGINE=InnoDB AUTO_INCREMENT=344 DEFAULT CHARSET=utf8 COMMENT='屏蔽券信息';