gpt4 book ai didi

mysql - 唯一索引允许重复条目,以防其中一个条目为 NULL

转载 作者:行者123 更新时间:2023-11-30 00:22:04 24 4
gpt4 key购买 nike

我正在使用 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 键吗?有什么办法可以解决这个问题吗?

最佳答案

NULL 不是值,因此不能用作唯一键的一部分。

在这种情况下,您应该避免使用NULL并使用类别。我非常确定,您的空类别在您的应用程序中具有意义,并且您可以使用类别来实现这一点。

an other answer at SO 比较.

关于mysql - 唯一索引允许重复条目,以防其中一个条目为 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23155190/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com