如何处理Mysql中的空主键?

How to deal with null Primary Key in Mysql?

我知道 sql pk 中不允许空值。

但是假设我们在 pk 中有一些空值,我们在实践中可以做什么?

我的想法

  1. 检查其他表以查看我们是否可以恢复 pk 中的空值
  2. 忽略空值,因为它们不需要是唯一的

如果有不同的想法请指正,我们还能做些什么?

让我们概括一下这个问题:

忘记 pk,假设我们有一个包含一些空值的唯一列,您如何处理空值? (我们可以将此列视为 pk,即使它未声明为 pk)

如果您有 NULL 个值,则您没有主键。那简直就是关系型数据库的定义。

如果您希望值是唯一的,则将列声明为 unique。使用另一列(或多列)作为主键。

assume we have some nulls in pk, what we can do about it in practice?

你有两个选择:

  • 更新行并在该列中设置非 NULL 值,然后再将其声明为主键。
  • 在将该列声明为主键之前删除该列中具有 NULL 的行。

您不能在具有 NULL 的列上声明主键约束。这会导致错误。

同样,之后不能在主键列中插入NULL。这也会导致错误,因为如果它是主键,则该列必须具有 NOT NULL 选项。

Let's generalise the question a bit: forget about pk, imagine we have a unique column with some nulls, what do you do about nulls?

如果您讨论的是具有唯一键的列的更一般情况,则可以在可为空的列上声明唯一键。

根据列的用途,在行没有值的情况下使用 NULL 可能是合法的。但必须是属性列,不能是主键

(we can treat this column as pk even if it is not declared as pk)

不,抱歉,如果它允许 NULL,您甚至不能将此列视为 事实上的 主键。主键的目的不仅是唯一的,而且还提供了一种查询方式,可以按值单独查询 select 每行。由于可为 null 的唯一键可以包含任意数量的 NULL 行(尽管 Microsoft SQL 服务器的非标准行为),NULL 无法明确地 select 每行。

很难理解你问这个问题的原因。你能更具体地描述一下这个场景吗?您要解决的问题是什么?我怀疑这是一个 XY Problem.