带有一个空字段的UNIQUE KEY

时间:2015-05-19 18:57:34

标签: mysql

我有下表:

- territory_id
- platform_id
- title_id (NULLable)
- collection_id (NULLable)

以下是我在表格中的一些值:

1 - ('US', 'ITUNES', 1, NULL)
2 - ('US', 'ITUNES', 1, NULL)
3 - ('US', 'ITUNES', NULL, 1)

1和2是重复的,不应该同时允许。但是,使用上述四个字段中的外键:

ALTER TABLE pricing ADD UNIQUE KEY (territory_id, platform_id, title_id, collection_id)

它仍然允许我插入它,很可能是因为如果其中一个字段为null,它会忽略完整性检查。有没有办法在(territory_id, platform_id, title_id)(territory_id, platform_id, colletion_id)上创建两个唯一键来解决这个问题?

1 个答案:

答案 0 :(得分:1)

这是MySQL bug是一个错误。

一些解决方法:

  1. 将所有字段设置为NOT NULL并使用一些特殊值来表示NULL,将其设置为默认值,然后让程序识别该值。 Hacky并且容易出错。

  2. 我正在猜测title_id和collection_id FK。如果该表中有空值,则可以插入该ID并避免使用NULL。我喜欢这个,但如果空ID很重要,则可能不合适。

  3. 也许你可以某种方式使用triggers。你可以在一个动作之前触发一个触发器,这样你就可以做一些事情,比如在插入之前检查表格,如果行存在,不要插入,或者做其他事情。