【发布时间】:2019-05-13 16:57:37
【问题描述】:
我有一个包含 10 列的员工表,并且必须为 id、姓名、地址、移动设备创建唯一键约束
在上述情况下,地址可能会为空,而手机也可能为空。但是,当它们出现时,应该保持唯一性。
首先,我通过组合上述所有键创建了一个唯一约束并观察到以下情况。
MySQL 中的实际行为。
001-Thiagu-NULL-900000 - Accepted
001-Thiagu-NULL-900000 - Accepted
001-Thiagu-0001-900000 - Accepted
001-Thiagu-0001-900000 - Rejected - Duplicate Record
所有数据库中的预期行为
001-Thiagu-NULL-900000 - Accepted
001-Thiagu-NULL-900000 - Rejected - Duplicate Record
001-Thiagu-0001-900000 - Accepted
001-Thiagu-0001-900000 - Rejected - Duplicate Record
无论值是否以NULL或Not存在,基本上都应考虑重复。
为了克服这个问题,我放弃了通过将列添加到唯一约束来组合和创建唯一的想法,并提出了一个具有唯一约束的字符串类型的新列。
我手动构造记录的每个插入并在任何插入上给出值,以便保持唯一性。
这是我不确定的上述第一种方法的正确方法还是任何其他方法。
创建的约束应该适用于 MySQL、SQL Server、Oracle 和 Postgres。
【问题讨论】:
-
请edit 你的问题(通过点击它下面的edit 链接)并为有问题的表添加 CREATE TABLE 语句,包括所有索引和约束。 Formatted text 请no screen shots。 edit 你的问题不在 cmets 中发布代码。
-
如果您在搜索框中键入“sql null in unique key”,那么您会得到一个列表,其中包含很多可能已经回答您的问题的条目:stackoverflow.com/search?q=sql+null+in+unique+key。我自己想说的话也在列表中,stackoverflow.com/questions/3906811/…。
-
是的,正在寻找一种适用于所有上述四种数据库产品的解决方案
标签: database