我正在使用MySQL数据库。
我创建了名为ACTIVITY_CATEGORY的数据库表,其中包含以下列:ID,ACTIVITY_CATEGORY_ID,NAME以及NAME上的唯一键ACTIVITY_CATEGORY_ID。
CREATE TABLE `activity_category` (
`ID` bigint(20) NOT NULL AUTO_INCREMENT,
`NAME` varchar(45) NOT NULL,
`ACTIVITY_CATEGORY_ID` bigint(20) DEFAULT NULL,
PRIMARY KEY (`ID`),
UNIQUE KEY `NAME_ACTIVITY_CATEGORY_ID` (`NAME`,`ACTIVITY_CATEGORY_ID`),
KEY `FK_2l8tu9lwnmh0909gf96ccevwu` (`ACTIVITY_CATEGORY_ID`),
CONSTRAINT `FK_2l8tu9lwnmh0909gf96ccevwu` FOREIGN KEY (`ACTIVITY_CATEGORY_ID`) REFERENCES `ACTIVITY_CATEGORY` (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=utf8
当我执行以下查询时,它的行为正确并显示重复条目错误:
-- Executes OK
INSERT INTO `ACTIVITY_CATEGORY` (`NAME`, `ACTIVITY_CATEGORY_ID`)
VALUES ('Sport', '1');
-- Error Duplicate entry 'Sport-1' for key 'NAME_ACTIVITY_CATEGORY_ID
INSERT INTO `ACTIVITY_CATEGORY` (`NAME`, `ACTIVITY_CATEGORY_ID`)
VALUES ('Sport', '1');
当我执行以下查询时,它表现得有点奇怪,因为它不显示重复条目错误:
-- Executes OK
INSERT INTO `ACTIVITY_CATEGORY` (`NAME`, `ACTIVITY_CATEGORY_ID`)
VALUES ('Sport', NULL);
-- This should display error, but executes OK instead
INSERT INTO `ACTIVITY_CATEGORY` (`NAME`, `ACTIVITY_CATEGORY_ID`)
VALUES ('Sport', NULL);
怎么可能?如果我插入NULL值,它不会考虑Unique键吗?有什么方法可以解决这个问题吗?
答案 0 :(得分:0)
NULL
不是值,因此不能用作唯一键的一部分。
您应该避免使用NULL
并在此案例中使用类别。我很确定,你的类在你的应用程序中是 ,你可以使用一个类别来实现这一点。