向表中添加主键是否会检查默认列?

时间:2014-12-09 12:20:57

标签: mysql database primary-key

我尝试在表中添加主键并将其设置为具有默认值的列,并且不为null且不唯一.MySQL接受该列作为主键...我想知道这是错误的如果用户输入2个具有默认值的记录,则他将无法执行此操作。这是一个问题,其中SQL应该将列检查为非默认值,或者这是设计器最终问题,即默认列不应成为主键。 ..?

2 个答案:

答案 0 :(得分:0)

空:

每个标记为NULL的列都只是指定此列可能包含NULL值。该列仍可以具有另一个默认值。

主键:

  • PK始终处于唯一状态,并且行上不能有两个相同的值
  • 每个表只能有一个PK,它的主索引在查询主列上的表时非常快。
  • PK始终是一个列,不能像其他索引(唯一或常用索引)那样分布在多个列上。
  • PK列不能接受NULL值

样品:

ID (INT, PK) |  Name (varchar)
 1           |   Foo            ->Valid
 2           |   Bar            ->Valid
 2           |   FooBar         ->Invalid (Duplicate Primary key value ID)

结论:是的MySQL应该并且会在第二次尝试设置默认值时抛出错误,因为它简单地处理了UNIQUE并且给定的默认值是const。当您在insert语句中没有为此列指定任何值时,MySQL服务器将尝试插入默认值。

几乎意味着:具有默认值的PrimaryKey列没有意义,除非您使用自动增量,这是一个伪"默认值"每次尝试插入内容时都会有所不同。

我希望这能回答你的问题

答案 1 :(得分:0)

我没有完全理解这个问题。您已将列声明为具有以下特征的主键:

  • NOT NULL
  • 默认值

主键强加了以下特征:

  • NOT NULL
  • 唯一

这些特征并非相互矛盾。唯一的问题是默认值只能在列中分配一次。第二次尝试插入具有默认值的行时,将违反唯一性约束。

换句话说,MySQL(我认为其他数据库也是如此)允许你声明这个,即使它看起来不是一个好主意。