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

问题描述:

我试图在表中添加主键并将其设置为具有默认值并且不为空的列并且不是唯一的.MySQL将该列接受为主键......我想知道这是错误的,因为如果用户输入2个记录具有默认值,他将无法做到这一点..这是一个问题,其中SQL应该检查列作为非默认值或这是一个设计师最终问题,默认列不应该作为主键。 。?向表中添加主键是否检查默认列?

+0

甲'初级key'意味着所有的值应'unique'和'未null'。 – 2014-12-09 12:23:13

+0

此外,“主键”应明确标识表中的每条记录。 – 2014-12-09 12:24:04

+0

如果用户将主键添加为具有默认值的列... SQL是否应该将它提示为错误或不是? – 2014-12-09 12:28:00

空:

每一个被室内用标记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应该和将在第二次尝试把一个默认值抛出一个错误,因为它的简单处理后唯一的,给定的默认值是const。当您的insert语句中没有为此列指定任何值时,MySQL服务器将尝试插入默认值。

差不多指:用默认值的PrimaryKey的列是没有意义的,除非你使用一个自动增加这是一个伪“默认值”每次尝试插入一些时间,这是不同的。

我希望这回答您的问题

我不完全理解的问题。您已经声明一栏,是具有这些特征的主键:

  • NOT NULL
  • 默认值

主键强加这些特点:

  • NOT NULL
  • 独特

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

换句话说,MySQL的(我认为其他数据库一样)让你声明这个即使看起来是一个好主意,它不会。

+0

我试图复制更多,发现如果只有一个默认的列记录存在,那么SQL不会显示错误,并接受该列作为更新的主键....但如果存在多个记录SQL将提示错误,像任何其他约束违反 – 2014-12-09 12:56:07

+0

@AmanVerma。 。 。这是这种声明的正确行为。 – 2014-12-09 13:27:21